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 二维数组$category[][]中。

我已经初始化了一个名为的数组$category,其中包含我希望使用的类别名称。我现在想从我的数据库中检索记录并将记录字段的内容image_file(例如 poly_interpolated.jpg)存储到第二维并循环,直到数据库中没有更多该类别的图像文件。

但是,当我回显数组时,我只看到一个字符,这根本不是我所期望的,因为$row['image_file'] 返回长度为多个字符的文件名。我原以为这$category[$count][$row_counter] = $row['image_filename'];会存储文件的名称,但似乎我在这个假设中还有一段路要走。

有人可以看看上面的代码并指出正确的方向吗?

4

1 回答 1

4

这就是你要找的。

一些见解-您只看到一个字符,因为您没有多维数组。你有一个一维字符串数组,当你访问这些字符串的索引时,你会得到字符串中的一个字符。

您需要一个表示数组的键的关联数组。

我添加了其他代码来将您的搜索连接到带有 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];
    }
}
于 2013-06-10T01:05:57.183 回答