【问题标题】:php for loop inside a foreach loop, not sure how to do itphp for循环在foreach循环中,不知道该怎么做
【发布时间】:2015-03-06 14:31:33
【问题描述】:

我正在尝试在 foreach 循环中执行 for 循环。

我的数据库中有一个如下表:

ID        | Fname | Lname
------------------------
1          Bart    Simpson
1          Mickey  Mouse
2          Peter   Griffin
2          Clark   Kenet
2          David   Johnson

我从数据库中调用数据(它可以工作,在 phpmyadmin 上测试过),我希望数据通过 ID 值显示在页面上,例如:

巴特辛普森、米老鼠和彼得格里芬

克拉克·肯尼特和大卫·约翰逊

正如您在任何行的姓氏前的“&”中看到的那样,但这不是我的问题。

这是我写的代码:

//HERE I RETRIVE ALL THE DATA FROM THE DATABASE.
$query = $dbh->query(" SELECT *
        FROM table
        WHERE ID= '{$ID}'
        ");   

//THIS CODE SHOWS THE NUMBER OF ROWS WITH THE CURRENT ID 
        $sql    = "SELECT COUNT( * ) FROM table WHERE ID= '{$ID}'";
        $result = $dbh->prepare($sql);
        $result->execute();
        $number_of_rows = $result->fetchColumn();

//THIS IS THE FOREACH IN WHICH I CALL ALL THE ROWS BY THEIR VALUE
          foreach ($query as  $key =>$value) {
                   $value['wFname'][$key] = !empty($value['wFname'][$key]) ? $value['wFname'][$key] : '';                      
$numRow = $number_of_rows-2; // THE ITEM BEFORE THE LAST ONE IN THE ARRAY
$lastItem = $number_of_rows-1; //LAST INDEX IN THE ARRAY
for($counter = 0; $counter = $numRow; $counter++){
 return  $value['wLname'][$counter] . ', '.  $value['wFname'][$counter];
  }
   return  "&" . $value['wLname'][$lastItem] . ', '.$value['wFname'][$lastItem] ;
   return ' ';

                };

使用此代码,我只能获得每个 id 的第一对名称。 任何帮助都会很棒。

【问题讨论】:

    标签: php for-loop foreach


    【解决方案1】:

    尝试改变:

    for($counter = 0; $counter = $numRow; $counter++){
    

    到:

    for($counter = 0; $counter =< $numRow; $counter++){
    

    您正在检查 $counter 是否等于 $numRow,您应该检查它是否等于并且小于...

    希望这会有所帮助。

    根据用户要求进行编辑

    尝试将结果存储在一个变量中,并在两个循环结束时返回该变量,但我不确定您要在这里实现什么,请尝试运行以下代码:

    //HERE I RETRIVE ALL THE DATA FROM THE DATABASE.
            $query = $dbh->query(" SELECT *
            FROM table
            WHERE ID= '{$ID}'
            ");
    
    //THIS CODE SHOWS THE NUMBER OF ROWS WITH THE CURRENT ID 
            $sql = "SELECT COUNT( * ) FROM table WHERE ID= '{$ID}'";
            $result = $dbh->prepare($sql);
            $result->execute();
            $number_of_rows = $result->fetchColumn();
    
    //THIS IS THE FOREACH IN WHICH I CALL ALL THE ROWS BY THEIR VALUE
            $return = "";
            foreach ($query as $key => $value) {
                $value['wFname'][$key] = !empty($value['wFname'][$key]) ? $value['wFname'][$key] : '';
                $numRow = $number_of_rows - 2; // THE ITEM BEFORE THE LAST ONE IN THE ARRAY
                $lastItem = $number_of_rows - 1; //LAST INDEX IN THE ARRAY
                for ($counter = 0; $counter <= $numRow; $counter++) {
                    $return .= $value['wLname'][$counter] . ', ' . $value['wFname'][$counter];
                }
                $return .= "&" . $value['wLname'][$lastItem] . ', ' . $value['wFname'][$lastItem];
                $return .= ' ';
            }
            return $return;
    

    【讨论】:

    • TNX,没有任何反应,我不明白为什么我没有看到最后的结果
    • 那是因为你的 return 语句,而不是在 for 循环中返回,你应该将值分配给一个变量,然后在大括号后循环结束时显示它。
    • tnx,foreach 是方法的一部分,这就是为什么它被赋值为 return
    • 是的,但是当代码到达返回时,该方法将停止执行for循环。
    • 不知道 tat retun 会杀死一个 for 循环。天呐!我在循环中更改了 return 但没有任何改变,仍然只看到第一对名称
    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多