下午看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数组函数搞透彻再说。
ps:不要担心自己英语low,会有人矫正。。大神啊。