2010-05-14 141 views
1

我想設置一個多維數組,但我的問題是,我無法從傳入的數據得到正確的順序。php多維數組問題

解釋

$x[1][11]=11; 
$x[1]=1; 

var_dump($x); 

在上面的代碼我只得到X [1]。

要正確將

$x[1]=1; 
$x[1][11]=11; 

var_dump($x); 

但在我的情況,我可以點確保X [1]將是第一位的,而x [1] [11]會來找。

有什麼辦法,我可以使用第一個例子,並得到正確的數組。請記住,數組深度很大。

我想獲得一個數組作爲樹

$x[node]=node data 
$x[node][childs]=childs data 
etc.. 

,並從傳入的數據是不知道該節點將是第一個和孩子第二,我正在尋找一個解決方案來創建陣列權

謝謝

+0

你已經徹底改變的故事應該說你正在試圖建立一個樹。現在知道你的輸入數據是什麼樣子會非常有用。 – erisco 2010-05-14 07:42:11

回答

2

如果你設置$x[1]1,那麼它是一個數字。
如果您將$x[1][11]設置爲任何值,那麼$x[1]數組
它不能同時是一個數字和一個數組。

$x = array(
    1 => 1 
); 

$x = array(
    1 => array(
     11 => 11 
    ) 
); 

您將不得不重新考慮您實際需要的結構。


如果你真的需要每個節點都有一個值孩子,你必須去與這樣的:

array(
    1 => array(
     'value' => 1, 
     'children' => array(
      11 => array(
       'value' => 11, 
       'children' => array(...) 
      ) 
     ) 
    ) 
) 
2

案例一:

// make $x[1] equal to array(11 => 11) 
$x[1][11]=11; 

// make $x[1] equal to 1 
$x[1]=1; 

// result, $x[1] is equal to 1 

案例二:

// make $x[1] equal to 1 
$x[1]=1; 

// make $x[1] equal to array(11 => 11) 
$x[1][11]=11; 

// result, $x[1] is equal to array(11 => 11) 

我不知道你真的想要$x[1]是。我會假設你可能希望這樣的:

​​

或者你可能只是想這樣的:

// make $x equal to array(1) 
$x[] = 1; 

// append 11, making $x equal to array(1, 11) 
$x[] = 11; 

// result, $x is equal to array(1, 11) 
+0

我同意但它和數組樹,我不能得到正確的樹順序,所以我必須建立基於傳入數據的數組 – ntan 2010-05-14 07:12:23

0

您不能設置$x[1]$x[1][11]在同一時間。請記住,在設置$x[1][11]時,您正在創建一個陣列,其數組類型爲array(11 => 11),並將該陣列指定給$x[1]。你想要做的是同時有1$x[1]這個數組,這是不可能的。

0

你的問題是你正在重新定義它。

$x[1][11]=11; // $x[1] is Array(11 => 11) 
$x[1]=1; // $x[1] is int(1) 

var_dump($x); // Will output Array(1 => 1) 

,並與你的第二個例子......

$x[1]=1; // $x[1] is int(1) 
$x[1][11]=11; // $x[1] is Array(11 => 11) 

var_dump($x); // Will output int(1) 

我不知道到底,但我想你想要做什麼是這樣的:

$x[1][1]=1; // $x[1] is Array(1 => 1) 
$x[1][11]=11; // $x[1] is Array(1 => 1, 11 => 11) 

var_dump($x); // Will output Array(1 => 1, 11 => 11) 
0

其他海報是完全正確的 - 你用數組覆蓋$x[1]的值。如果你想有一個樹狀結構,允許被標記內部節點,你看像a trie

class Node { 
    public $value = null, $children = array(); 
    public function set($keys, $value) { 
    if (empty($keys)) { 
     $this->value = $value; 
     return; 
    } 
    $key = array_shift($keys); 
    if (!isset($this->children[$key])) { 
     $this->children[$key] = new Node(); 
    } 
    $child = $this->children[$key]; 
    $child->set($keys, $value); 
    } 
} 

$trie = new Node(); 
$trie->set(array(1), 1); 
$trie->set(array(1, 11), 11); 
print_r($trie);