下午看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,會有人矯正。。大神啊。