Dwz*_*wza 4 arrays smarty smarty2
我怎样才能获得第一个智能数组元素?
其实我知道怎么做...但我有以下问题.
我得到一个看起来像这样的数组
[DATA] => Array
(
[12] => Array
(
[content] => foobar
)
[1] => Array
(
[content] =>
)
[2] => Array
(
[content] =>
)
[3] => Array
(
[content] =>
)
//this is a snipit of {$myVar|@print_r}
Run Code Online (Sandbox Code Playgroud)
这一直持续到 [11]
由于某种原因,没有[0]和[12]在这个位置.
我不知道这是否总是12,但我知道它总是在第一个位置.
我不能对这个数组进行排序,因为有另一个数组具有相同的排序顺序,我必须保留此顺序以便以后输出.
有没有办法选择第一个元素而不使用array[0]或array.0?
信息:我正在开发的项目使用Smarty 2
编辑
- 如果我知道如何:)我会重新索引数组:)
为了解决这个问题,我{php}在smarty中打开,得到了我需要的数组,将它分成两个数组(当然重新索引它们就这样开始0).比我0 从每个数组临时保存pos 到临时数组.0用下划线(_)覆盖orig ,0然后将它们多重排序,将原始值放回并将它们传递回$this->_tpl_vars非常复杂的方式.(全部在tpl内)
{php}
// get array data and re-index it
$i=0;
foreach( $this->_tpl_vars['options'] as $option )
{
foreach( $option['DATA'] as $data )
$array[$i][] = $data;
$i++;
}
//delete empty entrys
$i=0;
foreach( $array[1] as $data ){
if(trim($data['content']) != ""){
$s[] = $array[0][$i];
$a[] = $array[1][$i];
}
$i++;
}
//temp save first values
$tmp_s = $s[0];
$tmp_a = $a[0];
//override first values to have a clean sort and keep them values on pos 0
$s[0] = $a[0] = "_";
//sort the arrays
array_multisort($s,$a);
//putting back the original values
$s[0] = $tmp_s;
$a[0] = $tmp_a;
//pass the array back to tpl_vars
$this->_tpl_vars['new_options'][] = $s;
$this->_tpl_vars['new_options'][] = $a;
{/php}
Run Code Online (Sandbox Code Playgroud)
Mar*_*łek 20
如果在PHP中你有:
$smarty->assign(
'myVar',
array('DATA' =>
array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
))
);
Run Code Online (Sandbox Code Playgroud)
在Smarty中你可以使用:
{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}
Run Code Online (Sandbox Code Playgroud)
你会得到显示:
第一要素
但是,如果在PHP中使用:
$data = array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
);
next($data);
$smarty->assign(
'myVar',
array('DATA' => $data
)
);
Run Code Online (Sandbox Code Playgroud)
在Smarty中我和开头时的结果一样,结果如下:
第二个要素
你需要打电话:
reset($data);
Run Code Online (Sandbox Code Playgroud)
后
next($data);
Run Code Online (Sandbox Code Playgroud)
我想你不能在Smarty中为数组调用reset,但我可能错了.
也可以在Smarty中重置阵列,但这并不容易.
如果在PHP中你有:
$data = array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
);
next($data);
$smarty->assign(
'myVar',
array('DATA' => $data
)
);
Run Code Online (Sandbox Code Playgroud)
在Smarty你可以使用:
{assign var=$myVar.DATA value=$myVar.DATA|@reset}
{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}
Run Code Online (Sandbox Code Playgroud)
你会得到:
第一要素
结果