我想借此陣列,說:
array("one", "two", "three");
並使其成爲數組的數組,如:
$someArray["one"]["two"]["three"];
陣列的陣列($someArray
)將必須由創建某種形式的循環,因爲初始數組是由explode()
創建的,所以我不知道$someArray
會有多深。
我希望這是明確的,謝謝你所有的時間!
我現在正在讀它,我自己,array_map()
會爲此工作嗎?
我想借此陣列,說:
array("one", "two", "three");
並使其成爲數組的數組,如:
$someArray["one"]["two"]["three"];
陣列的陣列($someArray
)將必須由創建某種形式的循環,因爲初始數組是由explode()
創建的,所以我不知道$someArray
會有多深。
我希望這是明確的,謝謝你所有的時間!
我現在正在讀它,我自己,array_map()
會爲此工作嗎?
您應該使用array_reduce。 解決方案非常簡單。
要做到這一點,倒轉數組,然後應用減少。
$a = array('a','b','c');
$x = array_reduce(array_reverse($a), function ($r, $c) {
return array($c=>$r);
},array());
編輯擴大,並解釋版本:
在PHP中,我們沒有一個功能深入到一個數組自動,但我們還沒到。 如果您從底部開始,我們將能夠通過簡單的分配將數組放入前一個 。
$a = array('a','b','c');
$result=array(); // initially the accumulator is empty
$result = array_reduce(
array_reverse($a),
function ($partialResult, $currentElement) {
/* enclose the partially computed result into a key of a new array */
$partialResult = array($currentElement=>$partialResult);
return $partialResult;
},
$result
);
順便說一下,我更喜歡較短的形式。我認爲這是一個功能性的習慣用法,不需要進一步解釋中等經驗的開發人員(有一些功能背景)。第二個增加了很多噪音,這是適合學習,但源 分心到生產代碼(顯然我指的是功能,只是一個返回語句)。
你可以這樣做:
$path = array("one", "two", "three");
$ref = &$arr;
foreach ($path as $key) {
if (!isset($ref[$key])) break;
$ref = &$ref[$key];
}
在結束$ref
是$arr['one']['two']['three']
參考,如果它存在。如果您用$ref[$key] = array()
替換break
,您將改爲使用該結構構建數組。
笑同樣的事情,我的只是一個短一點哈哈 – Barkermn01 2010-11-19 13:56:32
我不知道爲什麼你會想要這個。
但卻基礎你的希望會是這樣
$numbers = array("one", "two", "three");
$array = array();
$pointer = &$array;
$last_val = NULL;
foreach($numbers as $key => $val){
if(!empty($pointer[$last_val])){
$pointer = &$pointer[$last_val];
$pointer = new array($val);
$last_val = $val;
}else{
$pointer = new array($val);
$last_val = $val;
}
}
這應該然後右鍵你要$陣列什麼;
這是未經測試,但我認爲應該工作,如果它不只是告訴我它是什麼做什麼,我會看看
$arrNew = array();
$ref = &$arrNew;
$arrParts = array("one", "two", "three");
foreach($arrParts as $arrPart){
$ref[$arrPart] = array();
$ref = &$ref[$arrPart];
}
當您打印$ arrNew時,它將打印此..
Array
(
[one] => Array
(
[two] => Array
(
[three] => Array
(
)
)
)
)
嘿隊友你能重寫沒有如此短的手,什麼是$ R,$ C他們應該通過$ K,$ V ?你一開始對我感到困惑,而且我一直在使用php 13年才爲那些沒有進步的用戶 – Barkermn01 2010-11-19 13:58:21
@ Barkermn01,你知道,$ r代表結果,$ c代表當前。我習慣於這個名字爲array_reduce函數參數。我會稍微擴大他們的名字(並嘗試添加一個解釋) – Eineki 2010-11-19 14:08:44