首页 > 解决方案 > 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
               )
       )
)

我不知道如何在同一循环中获得 [name] 而级别不同。我试图使:

foreach( $fields as $name => $value )
  {
    echo   $value->name;  }

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

标签: phparrays

解决方案


所以你的数据看起来像这样:

$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
)

推荐阅读