【问题标题】:Dynamic variables in looperLooper 中的动态变量
【发布时间】:2014-12-31 02:54:02
【问题描述】:

这是我的简单循环代码

foreach( $cloud as $item ) {

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

我需要在此循环器中使用if 方法来获取名称相同但描述和日期不同的标签。问题是我不知道每个标签名称,因为允许任何用户创建此标签。 我不是真正的 php 开发人员,所以如果是傻瓜问题,我很抱歉,感谢您的任何回答!

【问题讨论】:

  • 你能解释一下你想做什么吗?
  • 你好,保罗。我需要在多维数组中查找所有 [tagname] 值,如果值重复,则在 [desc] 和 [date] 值处循环。在输出中,它必须是这样的:-第一个标签--好的描述12-02-02-2014--好的描述52-05-02-2014--好的描述13-07-02-2014--第二个标签-不错的描述 11 - 03-02-2014 -- 不错的描述 51 - 04-02-2014 也许我需要重建一个数组?

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


【解决方案1】:

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

$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'),
    ...
);

但是

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

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

$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'];
    }
}

【讨论】:

  • 谢谢!!!就是这样:) 请问如何重新定义这个数组?真的很棒
  • 需要重写构建这个数组的函数/方法,因为重构当前数组效率不高。
  • 感谢您的回答!问题是我使用 WP_Query 获取数组。我真的不相信我可以自己重写这个函数......所以也许我只是按标记名对数组进行排序......
  • 也许您可以尝试更改查询本身(发送到 WP_Query 的参数)以获取您需要的数组?或者至少添加一个 order by 子句,这样您就不需要手动对数组进行排序。虽然我对 WordPress 没有太多经验...
猜你喜欢
  • 2023-01-19
  • 2016-01-17
  • 2015-04-03
  • 2011-10-21
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多