mysql-PHP多次元配列+MySQLi$row配列データ
$category = array(
"Alpha",
"Beta",
"Gamma",
"Delta",
"Epsilon",
"Zeta"
);
for ($count = 0; $count < 5; $count++) {
$query = "SELECT * FROM random_walk WHERE category = '$category[$count]'";
$result = $mysqli->query($query) or die($mysqli->error . __LINE__);
$row_cnt = $result->num_rows;
if ($result->num_rows > 0) {
$row_counter = 0;
while ($row = $result->fetch_assoc()) {
$category[$count][$row_counter] = $row['image_filename'];
$row_counter++;
echo $category[$count][$row_counter];
}
}
}
MySQLi$rowデータをPHPの2次元配列$category[][]
に格納しようとしています。
使用したいカテゴリ名を含む$category
という名前の配列を初期化しました。データベースからレコードを取得し、レコードフィールド image_file
(例:poly_interpolated.jpg)の内容を2次元目に保存し、画像ファイルがなくなるまでループします。データベース内のそのカテゴリの場合。
ただし、配列をエコーすると、 $ row ['image_file'
]がファイル名を返すため、予想していたものとはまったく異なる1文字しか表示されません。複数の文字の長さ。 $category [$ count] [$ row_counter] = $ row ['image_file name'];
はファイルの名前を保存すると思いましたが、私はその仮定から少し離れているようです。
誰かが上記のコードを見て、私を正しい方向に向けてくれませんか?
答え :
解決策:
これがあなたが探しているものです。
いくつかの洞察-多次元配列がないため、1文字しか表示されていません。文字列の1次元配列があり、それらの文字列のインデックスにアクセスすると、文字列に文字が含まれます。
配列を表すキーの連想配列が必要です。
IN句を使用して検索を単一の検索に連結するために他のコードを追加したので、 WHERE category IN ('Alpha', 'Beta', etc.)
のようになります。これははるかに高速になります。
最後に、レコードごとに、一致するインデックスを使用してカテゴリ配列に追加します。これにより、データがカテゴリコレクションに分類されます。
ああ、行カウンターも必要ありません。カテゴリの最後に行を追加するだけで、配列内で適切にインデックスが作成されます。
$category = array(
"Alpha" => array(),
"Beta" => array(),
"Gamma" => array(),
"Delta" => array(),
"Epsilon" => array(),
"Zeta" => array()
);
// Concatenate the categories for searching
$categories = array_keys($category);
for ($i = 0; $i < count($categories); $i++) {
$categories[$i] = "'{$categories[$i]}'";
}
$categories = implode(",", $categories);
// Query on an IN clause
$query = "SELECT * FROM random_walk WHERE category IN ({$categories})";
$result = $mysqli->query($query) or die($mysqli->error . __LINE__);
$row_cnt = $result->num_rows;
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$category[$row['category']][] = $row['image_filename'];
echo $category[$row['category']][count($category[$row['category']]) - 1];
}
}
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。