【问题标题】:PHP multidimensional array + MySQLi $row array dataPHP多维数组+MySQLi $row数组数据
【发布时间】:2013-06-05 14:55:57
【问题描述】:
$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']; 会存储文件的名称,但似乎我在这个假设中还有一段路要走。

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

【问题讨论】:

  • 你在重用变量$category,这是故意的吗?我觉得这会导致很多错误,因为您已经使用了循环的确切名称。
  • 这是故意的,因为数组名称与数据库中的类别字段相关(尽管这并不是说我不能更改数组名称,如果根据您的经验您认为它可能会导致错误)。

标签: php mysql multidimensional-array


【解决方案1】:

这就是你要找的。​​p>

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

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

我添加了其他代码来将您的搜索连接到一个带有 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];
    }
}

【讨论】:

  • +1 用于将该查询移出循环并解释将字符串视为数组时会发生什么。
  • 超级!谢谢你,史蒂文。非常感谢代码、解释和指示。
  • 它就像一个魅力......我几乎尿了。 PS 等待 15 声望提升!
  • 好的,再次卡住:将图像文件名存储到 $category 数组中后,我如何引用数组的特定部分以从中检索“image_filename”?我试过 echo $category['Alpha'][1] 但我只看到“Array()”这个词被回显。请给个建议好吗?
  • 试试print_r($category['Alpha']);var_dump($category['Alpha']);
猜你喜欢
  • 2017-05-18
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2022-01-07
  • 2013-03-04
相关资源
最近更新 更多