PHP多维数组处理。

时间:2021-03-17 19:00:39
Array ( [诸葛亮] => Array ( 
                [三十六记] => 
                      Array ( [兵法] =>  战略 ) ) 
         [PHP]   => Array ( 
                [PHP技术] => Array ( 
                        [技术] => 战略 ) ) 


这样一个数组的子数组的没确定,比如数组也可能是
Array ( [诸葛亮] =>  战略) 
         [PHP]   => Array ( 
                [PHP技术] => Array ( 
                        [技术] => 战略 ) ) 


怎么处理使数组值变成:
array(
    array('诸葛亮','三十六记','兵法','战略')
    array('PHP','PHP技术','技术','战略')
)

15 个解决方案

#1


和这位仁兄
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930
问的问题差不多,我的方法稍微动一下就可以了,:-)。

#2


我看看。

#3


你能帮忙改动下吗?foolbirdflyfirst

#4


Array
(
    [0] => -诸葛亮
    [1] => -诸葛亮-三十六记
    [2] => -诸葛亮-三十六记-兵法
    [3] => -诸葛亮-三十六记-兵法-战略
    [4] => -PHP
    [5] => -PHP-PHP技术
    [6] => -PHP-PHP技术-技术
    [7] => -PHP-PHP技术-技术-战略
)
像这样的结果之前我以前输出过了。就是没办法得到成
array(
  array('诸葛亮','三十六记','兵法','战略')
  array('PHP','PHP技术','技术','战略')
)
这样的数组。

#5


引用 1 楼 foolbirdflyfirst 的回复:
和这位仁兄
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930
问的问题差不多,我的方法稍微动一下就可以了,:-)。

啊,这题和刚刚的差不多!

#6


差很多。帮忙解决了。100分马上解贴。

#7


晕 怎么都没声音了。汗死。

#8


我的设想是这样的,编写一个递归函数获得一个数组的子数组的值,知道这个数组没有数组为止,用is_array()函数来判断是一个数组的值(返回false),还是一个子数组(返回true)。如果这个判读返回false的话,就终止递归,如果true就继续递归。具体实现自己想想,也可以结合array_walk()这个函数来完成递归

#9


200分求解。如果问题解决了  请在以下地址再次回复下。
http://topic.csdn.net/u/20110531/21/c615b4e0-7bf7-40d3-a9f1-722a88439bfd.html

#10


引用 8 楼 hezhenke123 的回复:
我的设想是这样的,编写一个递归函数获得一个数组的子数组的值,知道这个数组没有数组为止,用is_array()函数来判断是一个数组的值(返回false),还是一个子数组(返回true)。如果这个判读返回false的话,就终止递归,如果true就继续递归。具体实现自己想想,也可以结合array_walk()这个函数来完成递归


array_walk()函数我也使用了,还是不行。额。

#11


还都没人用  实例  解决出来啊?????
实例!!!!!急求结果中。

#12


自己改改,优化优化吧。
$tree = Array ('诸葛亮' => Array ( 
  '三十六记' => 
  Array ( '兵法' => '战略' ) ) ,
  'PHP' => Array ( 
  'PHP技术' => Array ( 
  '技术' => '战略' ) ) 
) ;

function combine_keys( $arr,$root='' )
{
    static $a = array();
    foreach( $arr as $k=>$v)
    {
        $t[] = !empty($root) ? ($root."-".$k) : $k;
        if( is_array($v))
        {
            combine_keys($v,end($t));
        }
else{
$a[] = array_merge(explode('-',end($t)),array($v));
}
    }
    return $a;
}

echo "<pre/>";
print_r(combine_keys( $tree ));

#13


太感谢 foolbirdflyfirst。准备解贴。

#14


foolbirdflyfirst  再去这个地址回复下。
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930

#15


还不错哈~

#1


和这位仁兄
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930
问的问题差不多,我的方法稍微动一下就可以了,:-)。

#2


我看看。

#3


你能帮忙改动下吗?foolbirdflyfirst

#4


Array
(
    [0] => -诸葛亮
    [1] => -诸葛亮-三十六记
    [2] => -诸葛亮-三十六记-兵法
    [3] => -诸葛亮-三十六记-兵法-战略
    [4] => -PHP
    [5] => -PHP-PHP技术
    [6] => -PHP-PHP技术-技术
    [7] => -PHP-PHP技术-技术-战略
)
像这样的结果之前我以前输出过了。就是没办法得到成
array(
  array('诸葛亮','三十六记','兵法','战略')
  array('PHP','PHP技术','技术','战略')
)
这样的数组。

#5


引用 1 楼 foolbirdflyfirst 的回复:
和这位仁兄
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930
问的问题差不多,我的方法稍微动一下就可以了,:-)。

啊,这题和刚刚的差不多!

#6


差很多。帮忙解决了。100分马上解贴。

#7


晕 怎么都没声音了。汗死。

#8


我的设想是这样的,编写一个递归函数获得一个数组的子数组的值,知道这个数组没有数组为止,用is_array()函数来判断是一个数组的值(返回false),还是一个子数组(返回true)。如果这个判读返回false的话,就终止递归,如果true就继续递归。具体实现自己想想,也可以结合array_walk()这个函数来完成递归

#9


200分求解。如果问题解决了  请在以下地址再次回复下。
http://topic.csdn.net/u/20110531/21/c615b4e0-7bf7-40d3-a9f1-722a88439bfd.html

#10


引用 8 楼 hezhenke123 的回复:
我的设想是这样的,编写一个递归函数获得一个数组的子数组的值,知道这个数组没有数组为止,用is_array()函数来判断是一个数组的值(返回false),还是一个子数组(返回true)。如果这个判读返回false的话,就终止递归,如果true就继续递归。具体实现自己想想,也可以结合array_walk()这个函数来完成递归


array_walk()函数我也使用了,还是不行。额。

#11


还都没人用  实例  解决出来啊?????
实例!!!!!急求结果中。

#12


自己改改,优化优化吧。
$tree = Array ('诸葛亮' => Array ( 
  '三十六记' => 
  Array ( '兵法' => '战略' ) ) ,
  'PHP' => Array ( 
  'PHP技术' => Array ( 
  '技术' => '战略' ) ) 
) ;

function combine_keys( $arr,$root='' )
{
    static $a = array();
    foreach( $arr as $k=>$v)
    {
        $t[] = !empty($root) ? ($root."-".$k) : $k;
        if( is_array($v))
        {
            combine_keys($v,end($t));
        }
else{
$a[] = array_merge(explode('-',end($t)),array($v));
}
    }
    return $a;
}

echo "<pre/>";
print_r(combine_keys( $tree ));

#13


太感谢 foolbirdflyfirst。准备解贴。

#14


foolbirdflyfirst  再去这个地址回复下。
http://topic.csdn.net/u/20110531/20/3d564b7c-77ad-4064-b8b0-d9602d871d0f.html?84930

#15


还不错哈~