簡體   English   中英

foreach循環的迭代問題

[英]iteration problems with foreach loop

我正在嘗試創建一個函數,該函數創建一個sql語句以將數據插入數據庫中,這是一個代碼段。 除最后一個foreach循環外,它工作正常。 由於某種原因,它不會迭代到數組中的最后一個元素,它將停留在倒數第二個元素上。 問題是第一個foreach循環是相同的代碼,並且工作正常,但是第二個給我帶來麻煩。

*注意:foreach循環中的if語句應該捕獲數組中的最后一個元素,並確保未插入','。 這就是問題所在。 如果我從第二個循環中取出if語句,則循環將迭代到最后一個元素,但沒有if塊,它將在末尾放置逗號並創建SQL語法錯誤。

第一個循環的輸出

INSERT INTO gardyloo.users (joe,bob,joe@hotmail.com,8de,154927,2014-12-18,2014-12-18 7:02:11)

沒有if的第二個循環的輸出

VALUES (:firstName,:lastName,:emailAddress,:password,:userid,:date_joined,:timestamp,)

第二個循環的輸出,如果

VALUES (:firstName,:lastName,:emailAddress,:password,:userid,:date_joined)  

foreach( $values as $a => $b ){

        if(next($values) == null){
            $sql .= $b."";
            break;
        }
        $sql .= $b.",";
    }
    $sql .= ") ";
    $sql .= "VALUES (";
    foreach( $values as $a => $b ){

        if(next($values) == null){
            $sql .= ":".$a;
            break;
        }
        $sql .= ":".$a.",";
    }
$sql .= ")";

*編輯,此代碼似乎可以正常工作:

$sql .= implode(', ', array_keys($values));
$sql .= ") ";
$sql .= "VALUES (:";
$sql .= implode(", :", array_keys($values)); 
$sql .= ")";    

無需中斷即可使用continue; Break中斷循環,而繼續僅繼續進行下一個迭代。

嘗試這個:

foreach( $values as $a => $b ){

    if($b == null){
        continue;
    }
    $sql .= ":".$a.",";
}

做這樣的事情:

       //Your data 
       $values = array(
                       'firstName'    => 'Joe', 
                       'lastName'     => 'bob', 
                       'emailAddress' => 'joe@hotmail.com', 
                       'password'     => '8de', 
                       'userid'       => 154927, 
                       'date_joined'  => '2014-12-18', 
                       'timestamp'    => '2014-12-18 7:02:11'
                       );

        //Begins the sentence
        $sql    = 'INSERT INTO gardyloo.users(';

        /**
         * Begins example code.
         * - array_keys shows the key as a value
         *   example: $values[0] = firstName
         */
        foreach(array_keys($values) as $k => $v)
        {
            //when the array arrives at the end, doesn't show ','
            if($k != count($values)-1)
                $sql .= $v.",";
            else
                $sql .= $v;
        }

        $sql .= ") ";
        $sql .= "VALUES (";
        $k = 0;//the new count initialized

        foreach($values as $v)
        {
            //when the array arrives at the end, doesn't show ','
            if($k != count($values)-1)
                $sql .= $v.",";
            else
                $sql .= $v;
            //increments the counter
            $k++;
        }

        $sql .= ");";

筆記:

  • 將函數中的代碼分開,因為兩個foreach非常相似。
  • 您可以使用foreach值來返回所需的值。
  • 詢問我是否還有其他問題。

否則我會做。 代替concat的是,字符串$sql創建2個變量$ columns和$ values,它們都是數組。 而且您不需要循環即可執行此操作。

因此,這就是我的做法:

$columns = array_keys($values);

$sql = "INSERT INTO table (". implode(" ,", $columns) . ") VALUES (". implode(" ,", $values);

在這里,您無需測試它是否是要break;的數組的最后一個元素break;

希望能幫助到你 ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM