获取第一个 Smarty 数组元素

问题描述 投票:0回答:2

如何获取第一个 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 arrays smarty smarty2
2个回答
22
投票

如果在 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}

你会得到:

第一个元素

结果


2
投票

如果您的数据位于数组 {$data} 中,那么使用 Smarty 3 您可以

{$firstData = $data|reset}
© www.soinside.com 2019 - 2024. All rights reserved.