为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
波斯汪 2021-05-10 13:22:41
在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;  }我应该在第一个循环中添加另一个循环吗?谢谢
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

因此,您的数据如下所示:


$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

)


查看完整回答
反对 回复 2021-05-21
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您可以使用array_map,array_key_exists以检索了name从数组索引


$jsonFormat = '{"array1":[{"name":"Plafond"}],"array2":{"name":"Chaudière"},"array3":[{"name":"Pla"},{"name":"Toc"}]}';

$jsonArray  = json_decode($jsonFormat,true);

$res = [];

array_map(function($v) use (&$res){

   if(array_key_exists('name', $v)){

     $res[] = $v['name'];

   }else{

     foreach($v as $_key => $_value){

        $res[] = $_value['name'];

     }

  }

}, $jsonArray);

echo '<pre>';

print_r($res);

结果:-


Array

(

 [0] => Plafond

 [1] => Chaudière

 [2] => Pla

 [3] => Toc

)

您可以$res用来比较名称。


查看完整回答
反对 回复 2021-05-21
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信