3
$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'ただし、配列をエコーすると、 ] が複数文字の長さのファイル名を返すため、まったく予想していなかった単一の文字しか表示されません。$category[$count][$row_counter] = $row['image_filename'];私はそれがファイルの名前を保存すると思っていたでしょうが、私はその仮定から少し外れているようです.

誰かが上記のコードを見て、正しい方向に私を向けることができますか?

4

1 に答える 1

4

これはあなたが探しているものです。

いくつかの洞察 - 多次元配列がないため、1 つの文字しか表示されません。文字列の 1 次元配列があり、それらの文字列のインデックスにアクセスすると、文字列内の文字が取得されます。

配列を表すキーの連想配列が必要です。

IN 句を使用して検索を 1 つの検索に連結する他のコードを追加したので、次のようになります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];
    }
}
于 2013-06-10T01:05:57.183 に答える