php多维数组问题

php多维数组问题

问题描述:

我想设置一个多维数组,但我的问题是,我无法从传入的数据得到正确的顺序。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

如果你设置$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(...) 
      ) 
     ) 
    ) 
) 

案例一:

// 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

您不能设置$x[1]$x[1][11]在同一时间。请记住,在设置$x[1][11]时,您正在创建一个阵列,其数组类型为array(11 => 11),并将该阵列指定给$x[1]。你想要做的是同时有1$x[1]这个数组,这是不可能的。

你的问题是你正在重新定义它。

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

其他海报是完全正确的 - 你用数组覆盖$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);