【问题标题】:PHP Multidimensional Array implode?PHP多维数组内爆?
【发布时间】:2022-01-01 11:56:12
【问题描述】:

我有一个数组

'Somethings' => 
    array (
      'Something' => 
      array (
        0 => 
        array (
          '@att' => 
          array (
            'Code' => '0',
          ),
          'Fruit' => 'Apple',
        ),
        1 => 
        array (
          '@att' => 
          array (
            'Code' => '3',
          ),
          'Fruit' => 'Banana',
        ),
        2 => 
        array (
          '@att' => 
          array (
            'Code' => '1',
          ),
          'Fruit' => 'Pear',
        )

列表继续。将所有“Fruits”转换为(我假设是内爆)为逗号分隔 OR 在仅包含名称元素的新数组中的最佳方法是什么?

水果是@att 代码的子代,这是唯一的问题。

感谢您的帮助!

【问题讨论】:

  • 为什么不简单地遍历数组并将'Fruit' 索引下的每个值添加到单独的列表中?
  • "水果是@att 代码的子代"?他们看起来像我的兄弟姐妹?为什么会有问题?

标签: php arrays multidimensional-array


【解决方案1】:

这很简单,只需遍历数组并抓取Fruit 索引下的每个水果,然后将其插入到单独的数组中。

$fruits = [
    "somethings" => [
        "something" => [
            0 => [
                "@att" => [
                    "code" => "0"
                ],
                "Fruit" => "Apple",
            ],
            1 => [
                "@att" => [
                    "code" => "3"
                ],
                "Fruit" => "Banana",
            ],
            2 => [
                "@att" => [
                    "code" => "1"
                ],
                "Fruit" => "Pear",
            ]
        ],
    ],
];

$sortedFruits = [];

// Iterate through the fruits array and add each fruit into the sortedFruits list.
foreach ($fruits["somethings"]["something"] as $fruit) {
    array_push($sortedFruits, $fruit["Fruit"]);
}

var_dump($sortedFruits);
/*
 * Output:
 * array (size=3)
 *      0 => string 'Apple' (length=5)
 *      1 => string 'Banana' (length=6)
 *      2 => string 'Pear' (length=4)
 */

或者为了得到逗号分隔的值,PHP 有一个内置的implode 函数:

implode(",", $sortedFruits)

【讨论】:

  • 工作得很好。谢谢斯库利!
【解决方案2】:

我们也可以对多维数组使用array_walk_recursive函数:

$your_array = array('Somethings' => 
        array(
          'Something' => 
          array(
            0 => 
            array(
              '@att' => 
              array(
                'Code' => '0',
              ),
              'Fruit' => 'Apple',
            ),
            1 => 
            array(
              '@att' => 
              array(
                'Code' => '3',
              ),
              'Fruit' => 'Banana',
            ),
            2 => 
            array(
              '@att' => 
              array(
                'Code' => '1',
              ),
              'Fruit' => 'Pear',
            )
          )
      )
      );
      
    
    $fruits_list="";
    $fruits_array = array();
    $callback = 
      function ($value, $key) use (&$fruits_array) {
         if($key == "Fruit"){
            array_push($fruits_array,$value);
            
         }
      };
    array_walk_recursive($your_array, $callback);
    $fruits_list = implode(',',$fruits_array);
    echo $fruits_list;

【讨论】: