php çok boyutlu dizi sorun

5 Cevap php

Ben kurulum için çok boyutlu bir dizi çalışıyorum ama benim sorunum ben gelen verilerden doğru sipariş alınamıyor olmasıdır.

Açıklamak

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

var_dump($x);

Yukarıdaki kodda ben sadece x olsun [1].

Doğru olurdu için

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

var_dump($x);

Ama benim durumumda ben x [1] ilk gelecek sağlamak nokta olabilir ve x [1] [11] sonra gelecektir.

Is there any way that i can use the first example and get right the array. Keep in mind that the array depth is large.

Ben ağaç gibi bir dizisini almak için çalışıyorum

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

ve gelen verilerden düğüm birinci ve ikinci çocuk gelecektir emin değildir ve ben sağ dizi oluşturmak için bir çözüm arıyorum

Teşekkürler

5 Cevap

Vaka Bir:

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

Olgu İki:

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

Ben gerçekten $x[1] olmak istiyorum bilmiyorum. Bunu isteyebilirsiniz varsaymak gidiyorum:

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

Yoksa sadece bu isteyebilirsiniz:

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

If you set $x[1] to be 1, then it's a number.
If you set $x[1][11] to anything, than $x[1] is an array.
It can't be a number and an array at the same time.

$x = array(
    1 => 1
);

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

Sen aslında ne istediklerini yapısı yeniden düşünmek gerekir.


Eğer gerçekten bir değer and çocuklar var hem de her düğüm gerekiyorsa, bu gibi bir şey ile gitmek gerekir:

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

Sen aynı anda $x[1] and $x[1][11] ayarlanamaz. $x[1][11] Eğer array(11 => 11) gibi bir dizi ile dizi oluşturma ve $x[1] bu diziyi atıyorsanız ayarı unutmayın. Ne yapmaya çalışıyorsun hem 1 ve mümkün değildir $x[1] olarak dizi olması.

Senin sorunun onu yeniden tanımlıyor olmamız.

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

ve ikinci örnek ...

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

Ben tam olarak bilmiyorum, ama ben yapmak istiyorum ne düşünüyorsunuz şudur:

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

Diğer posterler tam olarak doğru - bir dizi ile $x[1] değerini üzerine yazıyorsanız. Eğer dahili düğümler etiketli sağlayan bir ağaç yapısı istiyorsanız, a trie gibi bir şey bakıyoruz:

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