PHP çok boyutlu bir dizi ekleme

3 Cevap php

Ben çok benziyor veritabanından döndürülen bir dizi var:

$data = array(201 => array('description' => blah, 'hours' => 0),
              222 => array('description' => feh, 'hours' => 0);

Kod sonraki bit, ben bir foreach kullanıyorum ve başka bir tabloda anahtarı için kontrol. Sonraki sorgu veri dönerse, yeni bir saat değeri ile bu tuşun dizi 'saat' değerini güncellemek istiyorum:

foreach ($data as $row => $value){
   $query = $db->query('SELECT * FROM t WHERE id=$row');
   if ($result){
      $value['hours'] = $result['hours'];
   }

Ben foreach döngüsü için bildirimleri hemen her kombinasyonu denedim, ama ben $value['hours'] geçersiz bir başvuru olduğu hatayı almaya devam dışında hepsi güzel. I $value[] bildirmek denedim ... ama o da çalışmıyor. I $value arasında yineleme gerekmez böylece başka foreach döngü gerekli değildir.

Elbette bu beynim bunu algılamaktır daha kolaydır.

İşte bütün pasajı var:

foreach($_gspec as $key => $value){

            $sql = sprintf('SELECT * FROM List WHERE specialtyID=%s', $key);
            $query = $db->query($sql);

            if ($query->num_rows() !== 0){

                $result = $query->row_array();
                $value['hours'] = $result['hours'];

            }
        }

3 Cevap

İstediğiniz

$data[$row]['hours'] = $result['hours']

$row daha $key (o budur!) Olarak adlandırılan olacak

Bazı insanlar işaretçileri kullanarak öneririm, ama ben bu şekilde bana daha mantıklı buluyorum.

Böyle referansla geçmek için foreach $ değeri önünde işareti kullanmanız gerekir:

foreach ($data as $row => &$value){
   $query = $db->query($sql);
   if ($result){
      $value['hours'] = $result['hours'];
   }
}

Burada daha fazla bilgi: http://php.net/manual/en/control-structures.foreach.php

As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.

Kullan reference ->

foreach ($data as $row => & $value) {
   $query = $db->query('SELECT * FROM t WHERE id=$row');
   // [...]
   if ($result) {
      $value['hours'] = $result['hours'];
   }
}