PHP:foreach()ループの後に配列が空になる - PHP、配列、ループ、foreach

私はこの質問をしている

$categories = $dbh->query(" SELECT * FROM categories ORDER BY name ASC ");

この配列に対して2回ループする必要があります。

foreach($categories as $category) {
dd($category);
}
echo "---------------";
foreach($categories as $category) {
dd($category);
}

このコードは次を返します。

stdClass Object
(
[id] => 24
[name] => granchi
[slug] => granchi
)
stdClass Object
(
[id] => 26
[name] => molluschi
[slug] => molluschi
)
stdClass Object
(
[id] => 25
[name] => pesci
[slug] => pesci
)
---------------

2番目のループでは、配列は空になります。私も同様の質問を見つけましたが、 2つのWhileループ、2番目の空の配列を返しますか? しかし、私はPDOのための同様のソリューションを見つけられませんでした。

2つの同一の配列を2回作成することなくクエリを実行すると、2回繰り返すことができますか?

そして私は最初のループの後にそれが空になる理由を理解していません。

回答:

回答№1は4

クエリの結果を最初に配列にフェッチする必要があります。

ミスクリ:

<?php

$db = new mysqli("localhost", "root", "", "test");

if($db->connect_errno > 0){
die("Unable to connect to database [" . $db->connect_error . "]");
}

$sql = " SELECT * FROM categories ORDER BY name ASC ";

if(!$result = $db->query($sql)){
die("There was an error running the query [" . $db->error . "]");
}

while($row = $result->fetch_assoc()){
echo $row["**column name**"] . "<br />";
}

?>

PDO:

<?php

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");

$sql = "SELECT * FROM categories ORDER BY name ASC ";

try {
$stmt = $db->query($sql);
} catch(PDOException $ex) {
echo "An Error occured!";
}

$result = $stmt->fetch(PDO::FETCH_ASSOC);

foreach($result as $key => $val)
{
echo $key." - ".$val."<br />";
}

?>

最も人気のある