У меня есть массив, возвращаемый из базы данных, которая похожа так:
$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'];
}
}
Вы хотите
$ data [$ row] ['hours'] = $ result ['hours']
$ row
лучше назвать $ key
(что вот что это такое!)
Некоторые люди предлагают использовать указатели, но я считаю, что этот способ имеет больше смысла для меня.
Вам нужно использовать амперсанд перед значением $ в 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 символ &. Это назначит ссылку вместо копирования значения.
Используйте ссылку ->
foreach ($data as $row => & $value) {
$query = $db->query('SELECT * FROM t WHERE id=$row');
// [...]
if ($result) {
$value['hours'] = $result['hours'];
}
}