簡體   English   中英

遍歷數據庫記錄

[英]Loop through database records

我試圖遍歷所有用戶。

首先,我獲取用戶:

include 'database.php';
$records = $conn->prepare('SELECT username FROM users WHERE role = :role');
$user = "user";
$records->bindParam(':role', $user); 
$records->execute();
$results = $records -> fetchAll();

我得到了所有這樣的用戶:

foreach( $results as $row ) {
echo $row[0]."</br>";
}

結果是:

Madses
hans
henk
Piet
Peter
Frek
desley

我下面有另一個代碼,看起來像這樣:

foreach( $results as $row ) {
echo $row[0]."</br>";
}

$array = $row;

function getFirstValues(&$array, $amount){
    for($i=0; $i<$amount; $i++){
        echo $array[0];
        $shift = array_shift($array);
        array_push($array, $shift);
    }
    echo "<br />";
}

getFirstValues($array, 4);
getFirstValues($array, 4);
getFirstValues($array, 4);
getFirstValues($array, 4);
getFirstValues($array, 4);

但這呼應:

desley desley desley desley 
desley desley desley desley 
desley desley desley desley 
desley desley desley desley 
desley desley desley desley 

這不是應該的。 它應該以名字開頭,然后是第二個名字,依此類推。 任何想法為什么這不起作用我想要它嗎?

所需的輸出應為:

madses hans henk piet
peter frek desley madses 
hans henk piet peter 
frek desley madses hans 
henk piet peter frek 

當你做$array = $row; ,您已將$array設置為結果集中的最后一行,因此稍后在getFirstValues($array, 4);使用它時getFirstValues($array, 4); ,您只需要處理那一行。 所以首先,不要那樣做。 :)您可以只使用getFirstValues($results, 4); 代替。

之后的問題是,在getFirstValues函數中, $array[0]將是一個數組(一行)而不是字符串。 如果將其更改為$array[0][0] ,它將從行中獲取字符串,然后應獲得期望的輸出。


一些額外的建議-完全可選,因為您已經可以使用。

使用$results = $records->fetchAll(PDO::FETCH_COLUMN); 獲得字符串數組而不是數組數組可以簡化操作,因為無論如何您只選擇一個列。

另外,您可以通過使用一些數學運算來避免進行大量的array_shift / array_push函數調用,從而實現對循環數組的訪問。

$rows = 5;
$cols = 4;

$area = $rows * $cols;
$size = count($results);

for ($i=0; $i < $area; $i++) {
    echo $results[$i % $size] . ' ';
    if (($i + 1) % $cols == 0) echo '<br>';
}

對一件簡單的事情如此詳細,請嘗試:

    include 'database.php';
    $records = $conn->prepare('SELECT username FROM users WHERE role = :role');
    $user = "user";
    $records->bindParam(':role', $user); 
    $records->execute();
    $results = $records -> fetchAll();
    I get all the users like this:

function getFirstValues(&$array, $amount){
    $i = 0;
    foreach($array as $row ) { 
        if ($i != 0 && $i % ($amount-1) == 0) echo $row[0],'</br>';
        else echo $row[0];
        $array[$i] = (isset($array[$i+1])) ? $array[$i+1] : $array[0];
        $i++;
    }
    echo $names;
}

getFirstValues($results, 4);
getFirstValues($results, 4);
getFirstValues($results, 4);
getFirstValues($results, 4);

您需要享受引用結果數組的絕妙想法!

更換

foreach( $results as $row ) {
    echo $row[0]."</br>";
}

$array = $row;

$array = array();
foreach( $results as $row ) {
    $array[] = $row[0];
}

您僅獲得數據集中的姓,因為當前您正在將$row分配給$array ,並且在for循環之后, $row包含最后一行。

暫無
暫無

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

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