プロが教える店舗&オフィスのセキュリティ対策術

PHPで、クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したいです。
次のレコードの特定のフィールドの値を取って現在のレコードと比較させたいのですが、うまくいきません。
また、この手の質問でよく回答されているnext()は、クエリの場合、同じレコード内の次の値を取るだけなので意味がありませんでした。
また、次のレコードではなく前のレコードを取れば?という回答もありますが、今回はシステムの都合上、どうしても次のレコードを取得しなければならないため、どうしようもできず困っています。

//クエリの作成
$dbh = new PDO($dsn, $user, $password);
$statement = $dbh->prepare("SELECT テーブル1.* FROM テーブル1;");

if($statement){
if($statement->execute()){
while($row = $statement->fetch()){
$rows[] = $row;
}

}else{
$errors['error'] = "検索失敗しました";
}
$dbh = null;
}

//クエリを一行ずつ処理する
foreach($rows as $row){
//割愛
}

A 回答 (2件)

なんか質問を誤読してるのかもしれませんが、$rows という配列に結果をすべて入れてから、foreachで一件ずつなにかしようとしているんですよね?



なら、やりたいのは↓こういうことでしょうか??

foreach($rows as $key => $row){
$nextkey = $key + 1;
if($row['column'] == $rows[$nextkey]['column']){
// 比較の結果なにかする。
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます!
すごい!こんな書き方があるんですね!
$rows[$nextkey]['column']
非常に勉強になりました!

お礼日時:2022/08/02 11:57

$s = count($rows);


for ($i = 0; $i < $s; $i++) {
_ $j = $i + 1;
_ if ($j < $n) {
_ _ $u = $rows[$i]['特定のフィールド'];
_ _ $v = $rows[$j]['特定のフィールド'];
_ _ 比較($u, $v);
_ }
}
    • good
    • 0
この回答へのお礼

ありがとうございます!
No.1の方と方向性は同じですが、for文を用いた分かり易い記述で助かります!

お礼日時:2022/08/02 11:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!