如何使用不同级别的PHP解析数组

在foreach循环中,我想比较不同数组之间的[name]值,但它们的级别不同。


Array(

    [array1] => Array

       (

           [0] => WP_Term Object

               (

                   [name] => Plafond

               )

       )


   [array2] => WP_Term Object

       (

           [name] => Chaudière

       )

   [array3] => Array

       (

           [0] => WP_Term Object

               (

                   [name] => Pla

               )

           [1] => WP_Term Object

               (

                   [name] => Toc

               )

       )

)

我不知道如何在同一循环中获得[名称],而级别却不同。我试着做:


foreach( $fields as $name => $value )

  {

    echo   $value->name;  }

我应该在第一个循环中添加另一个循环吗?谢谢


波斯汪
浏览 111回答 2
2回答

慕姐8265434

因此,您的数据如下所示:$json = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';$array = json_decode($json);如果您不知道它会深入到什么地方,则应该使用一个简单的递归函数。也许是这样的:function get_name($o, &$output) {    if (is_array($o)) {        foreach($o as $v) {            get_name($v, $output);        }    } elseif (property_exists($o, "name")) {        $output[] = $o->name;    }}$output = [];foreach ($array as $v) {    get_name($v, $output);}如果您的数据看起来像您提供的样本(即始终是第一层或第二层),则无需担心递归。$output = [];foreach ($array as $k=>$v) {    if (is_array($v)) {        foreach ($v as $k2=>$v2) {            $output[] = $v2->name;        }    } else {        $output[] = $v->name;    }}无论哪种方式,您的输出值都在$output数组中:print_r($output);输出:Array(    [0] => Plafond    [1] => Chaudière    [2] => Pla    [3] => Toc)

摇曳的蔷薇

您可以使用array_map,array_key_exists以检索了name从数组索引$jsonFormat = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';$jsonArray&nbsp; = json_decode($jsonFormat,true);$res = [];array_map(function($v) use (&$res){&nbsp; &nbsp;if(array_key_exists('name', $v)){&nbsp; &nbsp; &nbsp;$res[] = $v['name'];&nbsp; &nbsp;}else{&nbsp; &nbsp; &nbsp;foreach($v as $_key => $_value){&nbsp; &nbsp; &nbsp; &nbsp; $res[] = $_value['name'];&nbsp; &nbsp; &nbsp;}&nbsp; }}, $jsonArray);echo '<pre>';print_r($res);结果:-Array(&nbsp;[0] => Plafond&nbsp;[1] => Chaudière&nbsp;[2] => Pla&nbsp;[3] => Toc)您可以$res用来比较名称。
打开App,查看更多内容
随时随地看视频慕课网APP