第一次在stackoverflow上提问,亮瞎了。。

下午看oc代码,看到这么一句


array_multisort($sort_order, SORT_ASC, $method_data);

这个是对多个数组进行排序的,倒是没什么好说。然后我自己给自己出了道题,是这样的。

$arr = array(10, 102, 199, "a"=>array('B','c','d'=>array('e','f')),'g','h'); 

要求把这个数组的小写全部变成大写 ABCDEFGH,说实话,纠结了有2个多小时。

想递归,想判断数组深度。

然后半成品是这么个结果:

function array_depth($array) {
        $max_depth = 1;

        foreach ($array as $value) {
            if (is_array($value)) {
                $depth = array_depth($value) + 1;

                if ($depth > $max_depth) {
                    $max_depth = $depth;
                }
            }
        }        
        return $max_depth;
 }
array_depth($ar);

function toto($arr,$depth='1'){
	$tem=array();
	foreach ($arr as $key => $value) {
		if(is_string($value)){
			$tem[]=strtoupper($value);
		}elseif(is_array($value)&&array_depth($value)>1){
			 // $J=str_repeat('[]', (array_depth($value)));
		   $tem[]=array_map('strtoupper',$value);
		}else{
			$tem[]=$value;
		}
	}

	return $tem;

}

第一个是判断数组的深度,我想着根据深度然后用$arr[][][]这样的方式去填充,二维数组可以解决,但是三维呢,四维呢。。而且问题来了,

$arr1[][][]=5;

$j=str_repeat('[]', 3);

那么用$arr1.$j是不可行的。


怎么办,去牛逼传说的stackoverflow,我也溢出一下。

老外的人真牛逼,我写问题用了3分钟,等待有人回答用了10秒。

第一个朋友说用一个函数就行,不需要知道什么数组深度。那么函数就是array_walk_recursive,之前只是简单用过array_map,array_map不能递归,所以他推荐用这个。

我试了一下,还是能达到部分效果,够用了,代码如下

$arr = array(10, 102, 199, "a"=>array('B','c','d'=>array('e','f')),'g','h'); 

array_walk_recursive($arr, function(&$value,$key){
$value= strtoupper($value);
});

var_dump($arr);

但是有意思的来了,因为我说变成ABCDEF那样,然后有回答的人就不乐意了,说OP说要把D也变了,OP我百度了下,可能就是楼主,编辑者的意思。

然后第一个回答我的人说,变不了key的值。

然后第二个人就咔嚓,show he the code

然后就有了以下的牛逼答案,亮瞎了。

$arr = array(10, 102, 199, "a"=>array('B','c','d'=>array('e','f')),'g','h'); 

$arr = json_decode(strtoupper(json_encode($arr)),true);

var_dump($arr);
die;

结果真的是ABCDEF ,我不知道是为何。。

还是需要把php数组函数搞透彻再说。

另外附上地址,要翻墙:http://stackoverflow.com/questions/31114927/how-do-i-change-the-unknown-array-depth-and-change-all-of-the-letters-from-lower

ps:不要担心自己英语low,会有人矫正。。大神啊。





展开阅读全文

没有更多推荐了,返回首页