php - 多维数组使用 foreach 返回错误结果

标签 php arrays foreach

我有一个与 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/

相关文章:

C - 使用 malloc 创建一个数组,然后循环遍历它

arrays - 如何构建对象层次结构,使所有名词都是单词但并非所有单词都是名词

C# WPF 窗口在 foreach 循环中不更新

java - 省略 <?> 不直观地破坏了这段代码

javascript - AJAX回调失败

php - 如何使 php 项目在 svn repo 中可访问?

arrays - Fortran:普通数组与存储相同数据量的对象所需的 RAM

jquery - 使用 cshtml 中返回的 JQuery FOREACH 行切换可见性

php - 如何计算所选表中具有空字段的所有记录

php - 在 PHP 中使用正则表达式验证电子邮件