如何获得第一个智能数组元素?
其实我知道怎么做......但我有以下问题。
我得到一个看起来像这样的数组
[DATA] => Array
(
[12] => Array
(
[content] => foobar
)
[1] => Array
(
[content] =>
)
[2] => Array
(
[content] =>
)
[3] => Array
(
[content] =>
)
//this is a snipit of {$myVar|@print_r}
直至[11]
由于某种原因,此位置没有[0]
和[12]
。
我不知道这总是12岁但是我知道它总是处于第一位。
我无法对这个数组进行排序,因为有另一个数组具有相同的排序顺序,我必须保留此顺序以便以后输出。
有没有办法在不使用array[0]
或array.0
的情况下选择第一个元素?
信息:我正在开发的项目使用Smarty 2
修改
- 如果我知道如何,我会重新索引数组:)
为了解决这个问题,我在smarty中打开了{php}
,获得了我需要的数组,将其拆分为两个数组(当然重新索引它们以便从0
开始)。比我从每个数组临时保存pos 0
到临时数组。用下划线(_)覆盖原始0
而不是多重分类,将原始值放回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}
答案 0 :(得分:18)
如果你在PHP中有:
$smarty->assign(
'myVar',
array('DATA' =>
array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
))
);
在Smarty中你可以使用:
{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}
你会看到:
第一个元素
但是如果在PHP中使用:
$data = array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
);
next($data);
$smarty->assign(
'myVar',
array('DATA' => $data
)
);
在Smarty中我和开头时的结果相同,结果将是:
第二个元素
您需要致电:
reset($data);
之后
next($data);
我认为你不能在Smarty中为数组调用reset,但我可能错了。
也可以在Smarty重置阵列,但这并不容易。
如果在PHP中你有:
$data = array(
12 => array('content' => 'first element'),
1 => array('content' => 'second element')
);
next($data);
$smarty->assign(
'myVar',
array('DATA' => $data
)
);
在Smarty你可以使用:
{assign var=$myVar.DATA value=$myVar.DATA|@reset}
{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}
你会得到:
第一个元素
结果
答案 1 :(得分:1)
如果您的数据位于{$ data}数组中,则可以使用Smarty 3
{$firstData = $data|reset}