php多维数组问题

时间:2010-05-14 06:49:38

标签: php arrays multidimensional-array

我正在尝试设置一个多维数组但我的问题是我无法从传入数据中获得正确的顺序。

解释

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

并且来自传入的数据不确定该节点是第一个还是子节点,我正在寻找一个正确创建数组的解决方案

由于

5 个答案:

答案 0 :(得分: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( ... )
            )
        )
    )
)

答案 1 :(得分: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[1] equal to array(1)
$x[1][] = 1;

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

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

或者你可能只想要这个:

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

答案 2 :(得分:0)

您无法同时设置$x[1] $x[1][11]。请记住,在设置$x[1][11]时,您要创建一个包含array(11 => 11)数组的数组,并将该数组分配给$x[1]。您要做的是同时拥有1$x[1]中的数组,这是不可能的。

答案 3 :(得分: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)

答案 4 :(得分: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);