2010-11-19 51 views
0

我想借此陣列,說:

array("one", "two", "three"); 

並使其成爲數組的數組,如:

$someArray["one"]["two"]["three"]; 

陣列的陣列($someArray)將必須由創建某種形式的循環,因爲初始數組是由explode()創建的,所以我不知道$someArray會有多深。

我希望這是明確的,謝謝你所有的時間!

我現在正在讀它,我自己,array_map()會爲此工作嗎?

回答

1

您應該使用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 
); 

順便說一下,我更喜歡較短的形式。我認爲這是一個功能性的習慣用法,不需要進一步解釋中等經驗的開發人員(有一些功能背景)。第二個增加了很多噪音,這是適合學習,但源 分心到生產代碼(顯然我指的是功能,只是一個返回語句)。

+0

嘿隊友你能重寫沒有如此短的手,什麼是$ R,$ C他們應該通過$ K,$ V ?你一開始對我感到困惑,而且我一直在使用php 13年才爲那些沒有進步的用戶 – Barkermn01 2010-11-19 13:58:21

+0

@ Barkermn01,你知道,$ r代表結果,$ c代表當前。我習慣於這個名字爲array_reduce函數參數。我會稍微擴大他們的名字(並嘗試添加一個解釋) – Eineki 2010-11-19 14:08:44

4

你可以這樣做:

$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,您將改爲使用該結構構建數組。

+0

笑同樣的事情,我的只是一個短一點哈哈 – Barkermn01 2010-11-19 13:56:32

0

我不知道爲什麼你會想要這個。

但卻基礎你的希望會是這樣

$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; 
    } 
} 

這應該然後右鍵你要$陣列什麼;

這是未經測試,但我認爲應該工作,如果它不只是告訴我它是什麼做什麼,我會看看

0
$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 
        (
        ) 

      ) 

    ) 

相關問題