Добавление к многомерному массиву в PHP

У меня есть массив, возвращаемый из базы данных, которая похожа так:

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

В следующем бите кода я использую a foreach и проверка для ключа в другой таблице. Если следующий запрос возвращает данные, я хочу обновить значение 'часов' в массиве того ключа с новым значением часов:

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

Это - весь штраф за исключением того, что я попробовал примерно каждую комбинацию объявлений для цикла foreach, но я продолжаю получать ошибку что $value['hours'] недопустимая ссылка. Я попытался объявить $value[] ... но это не работает также. Я не должен выполнять итерации через $value так другой foreach цикл не необходим.

Конечно, это легче, чем мой мозг чувствует его.

Вот целый отрывок:

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

            }
        }
6
задан hakre 14 November 2012 в 10:14
поделиться

3 ответа

Вы хотите

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

$ row лучше назвать $ key (что вот что это такое!)

Некоторые люди предлагают использовать указатели, но я считаю, что этот способ имеет больше смысла для меня.

6
ответ дан 10 December 2019 в 02:44
поделиться

Вам нужно использовать амперсанд перед значением $ в foreach, чтобы передать его по ссылке следующим образом:

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

Подробнее здесь: http : //php.net/manual/en/control-structures.foreach.php

Начиная с PHP 5, вы можете легко изменить элементы массива , поставив перед $ value символ &. Это назначит ссылку вместо копирования значения.

3
ответ дан 10 December 2019 в 02:44
поделиться

Используйте ссылку ->

foreach ($data as $row => & $value) {
   $query = $db->query('SELECT * FROM t WHERE id=$row');
   // [...]
   if ($result) {
      $value['hours'] = $result['hours'];
   }
}
0
ответ дан 10 December 2019 в 02:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: