PHP多维数组+ MySQLi $行数组数据

时间:2013-06-10 00:54:02

标签: php mysql multidimensional-array

$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 $行数据存储到PHP 2维数组$category[][]

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

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

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

1 个答案:

答案 0 :(得分: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];
    }
}