无法将多维数组转换为单个 php 数组

我正在尝试将多维 php 数组转换为单个数组..但很难做到这一点。我给定的输入如下:


array ( 0 => array ('id' => 3,

'text' => 'Name 3',

'children' => 

array (

  0 => 

  array (

    'id' => 4,

    'text' => 'Name 4',

    'children' => 

    array (

      0 => 

      array (

        'id' => 5,

        'text' => 'Name 5',

        'children' => 

        array (

          0 => 

          array (

            'id' => 6,

            'text' => 'Name 6',

          ),

        ),

      ),

    ),

  ),

  1 => 

  array (

    'id' => 7,

    'text' => 'name 7',

  ),

),),)

我的预期输出是这样的:


array(3=>'Name 3', 4=>'name 4', 5=>'name 5', 6=>'name 6', 7=>'name 7')

到目前为止我已经尝试过如下:


function nestedToSingle($array)

{

    $singleDimArray = [];


    foreach ($array as $item) {


        if (is_array($item)) {


            $singleDimArray = array_merge($singleDimArray, nestedToSingle($item));

        } else {

            $singleDimArray[] = $item;

        }

    }


    return $singleDimArray;

}

但它给了我这样的输出:


array ( 0 => 3, 1 => 'name 3',  2 => 4,  3 => 'Name 4',  4 => 5,  5 => 'name 5',  6 => 6,  7 => 'name 6',  8 => 7,  9 => 'name 7',)


蓝山帝景
浏览 96回答 2
2回答

千巷猫影

现在,您将进行循环,直到找到一个不是数组的值并将其写入您的singleDimArray. 因为您没有专门设置一个键,所以它会获取默认的数字递增键。因此每个非数组值都会单独注册。请尝试以下设置singleDimArray为静态变量的位置,以便每次调用下一个嵌套数组的函数时都可以继续添加它:function nestedToSingle( $array ){    static $singleDimArray = [];        foreach ( $array as $item ) {        if ( is_array( $item ) ) {            if ( array_key_exists( 'id', $item ) && array_key_exists( 'text', $item ) ) {                $singleDimArray[$item['id']] = $item['text'];            }             if ( array_key_exists( 'children', $item ) && is_array( $item['children'] ) ) {                nestedToSingle( $item['children'] );            }        }     }    return $singleDimArray;}

慕桂英3389331

您可以用于array_walk_recursive此用途。它的回调函数获取结构中每个叶节点的键和值。只需检查“文本”键并收集每个匹配值。$names = [];array_walk_recursive($input, function($value, $key) use (&$names) {    $key == 'text' && $names[] = $value;});use (&$names)必须将$names数组放入函数作用域。
打开App,查看更多内容
随时随地看视频慕课网APP