looper中的动态变量

时间:2014-12-21 10:30:26

标签: php multidimensional-array foreach while-loop looper

这是我简单的looper代码

foreach( $cloud as $item ) {

    if ($item['tagname'] == 'nicetag') {
        echo $item['tagname'];
            foreach( $cloud as $item ) {
                echo $item['desc'].'-'.$item['date'];
            }
    } else 
        //...
    }

我需要在此looper中使用if方法来获取具有相同名称但不同描述和日期的标记。问题是我不知道每个标签名称因为任何用户都可以创建这个标签。 我不是真正的php开发人员,所以如果它对傻瓜提出质疑并感谢任何答案,我将会这样做!

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是声明一个临时变量,该变量将保存当前循环的标记名

$currentTagName = '';
foreach( $cloud as $item ) {
    if ($item['tagname'] != $currentTagName) {
        echo $item['tagname'];
        $currentTagName = $item['tagname'];
    }

    echo $item['desc'] . '-' . $item['date'];
}

我假设您的数组结构如下:

$cloud array(
    array('tagname' => 'tag', 'desc' => 'the_desc', 'date' => 'the_date'),
    array('tagname' => 'tag', 'desc' => 'the_desc_2', 'date' => 'the_date_2'),
    ...
);

<强> BUT

此解决方案引发了一个问题 - 如果您的数组未按标记名排序,则可能会出现重复的标记名。

所以更好的解决方案是重新定义你的数组结构:

$cloud array(
    'tagname' => array (
        array('desc' => 'the_desc', 'date' => 'the_date'),
        array('desc' => 'the_desc_2', 'date' => 'the_date_2')
    ),
    'another_tagname' => array (
        array('desc' => 'the_desc_3', 'date' => 'the_date_3'),
        ...
    )
);

然后你可以得到这样的数据:

foreach ($cloud as $tagname => $items) {
    echo $tagname;

    foreach($items as $item) {
        echo $item['desc'] . '-' . $item['date'];
    }
}