如何获取第一个 smarty 数组元素?
实际上我知道该怎么做...但我有以下问题。
我得到一个传递的数组,看起来像这样
[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}
如果在 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 中调用数组重置,但我可能是错的。
也可以在 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}
你会得到:
第一个元素
结果
如果您的数据位于数组 {$data} 中,那么使用 Smarty 3 您可以
{$firstData = $data|reset}