我有一个从数据库返回的数组,如下所示:
$data = array(201 => array('description' => blah, 'hours' => 0),
222 => array('description' => feh, 'hours' => 0);
在下一段代码中,我使用foreach
并检查另一个表中的密钥。如果下一个查询返回数据,我想用新的小时值更新该键的数组中的'hours'值:
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'];
}
}
答案 0 :(得分:6)
你想要
$data[$row]['hours'] = $result['hours']
$row
最好命名为$key
(就是这样!)
有些人会建议使用指针,但我发现这种方式对我来说更有意义。
答案 1 :(得分:3)
你需要在foreach中的$ value前面使用&符号来通过引用传递它,如下所示:
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元素 与&amp ;.这将指定参考 而不是复制价值。
答案 2 :(得分:0)
使用reference - >
foreach ($data as $row => & $value) {
$query = $db->query('SELECT * FROM t WHERE id=$row');
// [...]
if ($result) {
$value['hours'] = $result['hours'];
}
}