【问题标题】:loop through 3-dimensional array php循环遍历3维数组php
【发布时间】:2017-09-26 19:03:54
【问题描述】:

我正在尝试遍历一个多维数组,并不断将头撞在墙上试图弄清楚。 我实际上是在尝试打印 ID 的所有值。

这是我目前所拥有的,但它一直给我一个“数组到字符串转换”的错误。

foreach ($threadsarray as $key => $threads) {   
    foreach ($threads as $anotherkey => $i) {
        foreach($i as $id => $threadid)
        echo 'key:'.$key[0]. ' AnotherKey: '.$anotherkey["threads"].' AnotherAnotherKey: '.$i["id"].' value:'.$threadid.'<br>';
    }
}

我试图模仿这会做什么,但使用“For循环”

$threadsarray['threads']['0']['id'];
$threadsarray['threads']['1']['id'];

这里是数组.....

Array
(
    [threads] => Array
        (
            [0] => Array
                (
                    [archived] => 
                    [attachment] => 
                    [business_purpose] => booking_direct_thread
                    [id] => 178369845
                    [inquiry_reservation] => 
                    [last_message_at] => 2017-04-07T18:52:07Z
                    [listing] => Array
                        (

【问题讨论】:

  • 然后呢?有什么问题?

标签: php arrays for-loop multidimensional-array


【解决方案1】:

这是可以做到的

foreach ($threadsarray['threads'] as $thread) {   
     print $thread['id'];
}

for版本

$idx = count($threadsarray['threads']);
for($i=0;$i<$idx;$i++){
   print $threadsarray['threads'][$i]['id'];
}

【讨论】:

  • 你不需要第二个foreach
  • @u_mulder 为什么?他应该做echo $threads[0]['id'];吗?然后他可以简单地从中间块中获取代码行。请解释一下。
  • @u_mulder 是的,对不起,你是对的,这里已经很晚了......谢谢提示
  • 我喜欢这个。如何在每个线程 id 之后插入一个
    以使它们都不会显示在一行上?
  • “for”版本给了我“未定义的偏移量:10”错误
【解决方案2】:

你得到的错误是因为你试图回显一个数组。

我会这样做:

foreach($threadsarray['threads'] as $key => $thread){
    echo 'key:' . $key . ' - ';
    foreach($thread as $key2 => $value2){
        echo 'key2:' . $key2 . ' - ';
        if(is_array($value2)){
            foreach($value2 as $key3 => $value3){
                echo 'key3:' . $key3 . ' - value3: ' . $value3;
            }
        }else{
            echo 'value: ' . $value2;
        }
    }
}

你总是可以通过print_r($threadsarray)来检查整个数组结构

最好对任意数量的“级别”使用递归函数:

function printAll($a) {
    if (!is_array($a)) {
        echo $a, ' ';
        return;
    }

    foreach($a as $k => $value) {

         printAll($k);
         printAll($value);

    }
}

你可以这样称呼它:printAll($threadsarray);

Reference

【讨论】:

  • 这个给了我一个“数组到字符串转换”的错误...是不是因为在下面的某个地方还有另一个嵌套数组...?
  • 那么 $value3 是另一个数组,我建议编写一个递归函数,遍历每个级别来回显“键”,如果“值”是数组,则调用自身,否则会回显“值”
  • 这就是我所怀疑的......我该怎么做?
  • 刚刚编辑了答案并添加了一个递归函数来做到这一点。
  • 非常感谢,但是如果我不一定知道 $k
猜你喜欢
  • 2012-04-21
  • 2011-01-02
  • 2016-02-16
  • 2021-09-17
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多