我试图遍历所有用户。
首先我获取用户:
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
答案 0 :(得分:4)
当您执行$array = $row;
时,您已将$array
设置为结果集中的最后一行,因此稍后当您在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>';
}
答案 1 :(得分:1)
如此简单,请尝试:
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);
您需要享受引用结果数组的绝佳主意!
答案 2 :(得分:1)
替换
foreach( $results as $row ) {
echo $row[0]."</br>";
}
$array = $row;
与
$array = array();
foreach( $results as $row ) {
$array[] = $row[0];
}
您只获取数据集中的姓氏,因为目前您要将$row
分配给$array
,并且在for
循环后,$row
包含最后一行