【问题标题】:PHP looping through multidimensional array and extracting informationPHP循环遍历多维数组并提取信息
【发布时间】:2016-02-28 23:41:45
【问题描述】:

我有一个从函数自动生成的多维数组。它看起来像这样:

Array(
[0] => Array
    (
        [0] => stdClass Object
            (
                [team] => Borussia Dortmund (gazeder)
            )

        [1] => stdClass Object
            (
                [team] => Real Madrid (Deycekslo)
            )

    )

[1] => Array
    (
        [0] => stdClass Object
            (
                [team] => Bayern Munchen (DaviiX)
            )

        [1] => stdClass Object
            (
                [team] => AS Roma (jakobmmm)
            )

    )

[2] => Array
    (
        [0] => stdClass Object
            (
                [team] => Chelsea (davorm9)
            )

        [1] => stdClass Object
            (
                [team] => Napoli (pubilegenda)
            )

    )

    ETC...

所以我必须从中提取“团队”值并将其存储到数据库中。数据库部分不是问题,问题是提取。 我尝试了几件事,但它不起作用:

    $length = count($game->tour);
       for ($row = 0; $row < $length; $row++) {
           for ($col = 0; $col <= 2; $col++) {
           echo "<p>".$game->tour[$row][$col]."</p>";
       }
    }

唯一有效的是:

    foreach($game->tour[0][0] as $array ) {
        echo $array;
        foreach($game->tour[0][1] as $array2 ) {
            echo $array2;
        }
    }

    foreach($game->tour[1][0] as $array ) {
        echo $array;
        foreach($game->tour[1][1] as $array2 ) {
            echo $array2;
        }
        echo '<br />';
    }

那个工作正常,但它是垃圾,因为我需要能够遍历该数组并打印所有“团队”值。有什么建议吗?

谢谢!

【问题讨论】:

  • 所以您需要提取团队值以将其保存到数据库中,对吗?不提取打印对吗?
  • 我相信生成该数组的函数,是在解码一些 json 吗?您应该将 true 作为第二个参数添加到 json_decode 以便它成为一个数组而不是 stdClass 对象。
  • 所以我必须写 json_decode($game->tour) 然后去循环?
  • 函数从数据库中读取参数(参数为团队)并保存为数组。
  • 我添加了 json_dedoce 但它给了我空数组。

标签: php loops multidimensional-array foreach stdclass


【解决方案1】:

未经测试,但我想这应该可以工作

function ext($obj,$name){
    $ret=array();
    $rem=array();
    $f=function() use(&$rem,&$ret,$name){
        $v=reset($rem);
        assert(NULL!==($key1=key($rem)));
        unset($rem[$key1]);
        foreach($v as $key2=>$value){
            if($key2==$name){$ret[]=$value;}
            if(is_array($value) || is_object($value))
            {
                $rem[]=$value;
            }
        }
    };
    $rem[]=$obj;
    while(!empty($rem))
    {
        $f();
    }       
    return $ret;
}

$teams=ext($arr,'team');

编辑:修正了变量中的错字.. Edit2:警告,如果你有任何循环引用,这可能会进入无限循环......不知道,你应该测试你是否担心这一点。 edit3:修复了另一个变量名拼写错误 x.x(这会破坏代码)

【讨论】:

  • 澄清一下:我用 $arr 调用数组?
  • 函数*是的。您使用数组作为第一个参数调用 ext() 函数,并在第二个参数(团队)中查找您要查找的值名称
  • 好的,它似乎可以工作,但如果我输入 echo $teams 只是为了看看结果如何,它给我的只是 Array 而不是所有的团队对象
  • 它实际上几乎可以正常工作,但是是的,它是一个无限循环
猜你喜欢
  • 2012-04-21
  • 2011-01-02
  • 2016-02-16
  • 2021-09-17
  • 1970-01-01
  • 2010-10-24
相关资源
最近更新 更多