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..
,并从传入的数据是不知道该节点将是第一个和孩子第二,我正在寻找一个解决方案来创建阵列权
谢谢
如果你设置$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)
我同意但它和数组树,我不能得到正确的树顺序,所以我必须建立基于传入数据的数组 – 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);
你已经彻底改变的故事应该说你正在试图建立一个树。现在知道你的输入数据是什么样子会非常有用。 – erisco 2010-05-14 07:42:11