2010-04-20 21 views
6

tengo una matriz que se devuelven desde la base de datos que se ve así:Agregando a una matriz multidimensional en PHP

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

En el siguiente fragmento de código, estoy usando un foreach y comprobando el de la clave en otra mesa. Si la consulta siguiente devuelve datos, quiero actualizar el valor de 'horas' en la matriz de esa llave con un nuevo valor horas:

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

Está todo bien, excepto que he probado casi todas las combinaciones de las declaraciones de la bucle foreach, pero sigo obteniendo el error de que el $value['hours'] es una referencia no válida. Intenté declarar $value[] ... pero eso tampoco funciona. No necesito iterar a través del $value, por lo que no es necesario otro ciclo foreach.

Seguramente esto es más fácil de lo que mi cerebro lo está percibiendo.

Aquí está todo el fragmento: (! Que es lo que es)

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']; 

      } 
     } 
+0

¿Cuáles son '$ result' y las variables query' $'? – vooD

Respuesta

6

¿Quieres

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

$row sería mejor llamarlas como $key

Algunas personas sugieren usando punteros, pero me parece que esta forma tiene más sentido para mí.

3

Es necesario utilizar símbolo de unión frente al valor de $ en foreach para pasarlo por referencia así:

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

Más información aquí: http://php.net/manual/en/control-structures.foreach.php

A partir de PHP 5, puede modifique fácilmente los elementos de la matriz precediendo $ valor con &. Esto asignará la referencia en lugar de copiar el valor.

+0

Acepté la otra respuesta porque eso es lo que hice con mi propia cordura, pero te di un impulso porque esto funciona igual de bien. –

0

Uso reference ->

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