第一次在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,会有人矫正。。大神啊。





  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值