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

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

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

PHP
蓝山帝景 2023-07-21 16:23:12
我正在尝试将多维 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',)
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

现在,您将进行循环,直到找到一个不是数组的值并将其写入您的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;

}


查看完整回答
反对 回复 2023-07-21
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您可以用于array_walk_recursive此用途。它的回调函数获取结构中每个叶节点的键和值。只需检查“文本”键并收集每个匹配值。


$names = [];

array_walk_recursive($input, function($value, $key) use (&$names) {

    $key == 'text' && $names[] = $value;

});

use (&$names)必须将$names数组放入函数作用域。


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

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