我检索一组mysql行作为关联数组的数组(我正在使用pdo fetch all)。我的关联数组包含一个名为“password”的键。如何循环遍历数组以更改所有密码值?如果密码等于0,我需要将它们设置为0。
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
/* gotta strip all the password, I can't send them! */
foreach($result as $res) $res['password'] = (!$res['password']) ? 0 : 1;
答案 0 :(得分:6)
&
中的 foreach
怎么样:
foreach($result as & $res) {
$res['password'] = (!$res['password']) ? 0 : 1;
}
并且,作为预防措施,您可能希望此foreach
指令遵循unset()
循环,以打破数组最后一个元素的引用:
unset($res);
作为参考,引用the manual:
您可以使用
&
前面的$ value来轻松修改数组的元素。
这将分配参考而不是复制值。
稍后在同一个手册页上有关于unset()
的说明。
答案 1 :(得分:1)
Foreach允许您引用当前值(&
运算符),因此它是您要更改的值的别名。然后你已经“手头”了。
在引用当前元素旁边,您也可以引用密码值:
foreach($result as &$res) {
$password = &$res['password'];
$password = (int)(bool) $password;
}
unset($res, $password);
如果您不想使用引用并希望处理数据副本,则可以使用array_map
轻松实现此目的:
$result = array_map(function($res)
{
$res['password'] = (int)(bool) $res['password'];
return $res;
}, $result);
或者,如果您想直接使用没有引用的原始数组:
foreach($result as $key => $res)
{
$result[$key]['password'] = (int)(bool) $result[$key]['password'];
}
你可以在较旧的PHP代码中找到这种变体,因为foreach过去不可能使用这些变体,但是它并不容易阅读。