2017-05-19 9 views
-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(); 

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 

これはどのようにすべきではありません。最初の名前から2番目の名前などで始まる必要があります。なぜ私はそれが欲しいのどのようなアイデアが動作していない?

所望の出力はこのようになります。

madses hans henk piet 
peter frek desley madses 
hans henk piet peter 
frek desley madses hans 
henk piet peter frek 
+0

希望の出力を追加できますか?それははっきりしていません。 – inarilo

+0

@inariloはどのようにフォーマットをしたいのですか –

答えて

4

$array = $row;を実行すると、$arrayが結果セットの最後の行に設定されているため、後でgetFirstValues($array, 4);で使用すると、その1行だけで作業しているだけです。まず第一に、それをしないでください。 :)代わりに代わりにgetFirstValues($results, 4);を使うことができます。

この問題は、getFirstValues関数では、$array[0]が文字列ではなく配列(行)になります。 $array[0][0]に変更すると、行から文字列が取得され、期待どおりの出力が得られるはずです。


いくつかの特別なアドバイスは、あなたが既に動作しているものを持っているので完全にオプションです。

$results = $records->fetchAll(PDO::FETCH_COLUMN);を使用すると、配列の配列ではなく文字列の配列を得ることができます。なぜなら、とにかく1つの列しか選択していないからです。

また、数値計算を使用して環状配列へのアクセスを実現することによって、多くの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>'; 
} 
+0

完璧に説明していただきありがとうございます。 –

+0

ようこそ。 –

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); 

あなたは結果の配列を参照のあなたの優れたアイデアを楽しむために必要!

+0

私は投稿したフォーマットでなければなりませんが、ユーザーは1人ではなく、すべてのユーザーでなければなりません。 –

+0

なぜ 'echo $ row [0]。 '
';? – inarilo

+0

私はあまりにも多くのエコーコールを嫌い、それはいくつかの目的のためにスケーラブルであると思います。ただのdev個人的な考え。 – calexandre

1

現在あなたが$arrayから$rowを割り当てているので、あなたは、あなたのデータセットでのみ姓を取得している、とforループの後、$rowは最後が含まれてい

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

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

$array = $row; 

を交換してください行。

関連する問題