我有一个与 mysql 数据库交互的 php 类,然后作为结果获取一个数组。
$res = $db->getResult(); // $res is an array
我将它与 print_r 一起使用:
print_r($res);
它输出这个:
Array ( [0] => Array ( [id] => 1 [firstname] => Mohamed [lastname] => Kadri ) [1] => Array ( [id] => 2 [firstname] => Slim [lastname] => Nejmaoui ) [2] => Array ( [id] => 3 [firstname] => Sameh [lastname] => Chraiti )
And with foreach:
foreach ($res as $row) {
echo $row['id'] . ' ' . $row['firstname'] . ' ' . $row['lastname'] . '<br />';
}
它输出这个:
1 Mohamed Kadri
2 Slim Nejmaoui
3 Sameh Chraiti
但是当只有一行时,它会显示:
1 1 1
M M M
K K K
(1 是 id,M 是名字的第一个字母,K 是姓氏的第一个字母)。
所以也许当有多行时,该类会生成一个多维数组,foreach 将对其进行处理,而当只有一行时,它会生成一个简单的数组,该数组将被这个精确的 foreach 视为多维数组.
那么我是否应该设置一个条件来处理两种类型的 foreach 中的一种?
谢谢。
最佳答案
是的,看起来这正是正在发生的事情。最有可能的是,当查询仅返回一行时,$db->getResult()
将结果行作为数组(而不是结果中的子数组)返回。因此,您需要检测是否存在嵌套数组并进行适当处理:
if (isset($res[0]) && is_array($res[0])){
foreach ($res as $row) {
echo $row['id'] . ' ' . $row['firstname'] . ' ' . $row['lastname'] . '<br />';
}
}else{
echo $res['id'] . ' ' . $res['firstname'] . ' ' . $res['lastname'] . '<br />';
}
关于php - 多维数组使用 foreach 返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442613/