【问题标题】:Search multidimensional array and place found values in new array (PHP)搜索多维数组并将找到的值放入新数组(PHP)
【发布时间】:2014-04-25 14:47:42
【问题描述】:

我正在尝试根据在这个 SO 问题中找到的答案来完成这项工作:How to search by key=>value in a multidimensional array in PHP - 但我没有运气。

我正在查询数据库。我需要获取结果并将所有具有 'type' = $type 的结果放入一个新数组中,以使用该新数组来显示信息。

搜索功能:

function search($array, $key, $value){
    $results = array();
    search_r($array, $key, $value, $results);
    return $results;
}
function search_r($array, $key, $value, &$results){
    if (!is_array($array)) {
        return;
    }
    if (isset($array[$key]) && $array[$key] == $value) {
        $results[] = $array;
    }
    foreach ($array as $subarray) {
        search_r($subarray, $key, $value, $results);
    }
}  

守则:

$getTypes = mysqli_query($link, "SELECT * FROM Type WHERE section = ".$selectValue." ORDER BY `order`");
$getCategories = mysqli_query($link, "SELECT * FROM Category WHERE section = ".$selectValue." ORDER BY `order`");
$getdbvalues = mysqli_query($link, "SELECT * FROM `Data` WHERE section = ".$selectValue." AND `date` = ".$datecomp);
$dbvalues = mysqli_fetch_assoc($getdbvalues);
while($type = mysqli_fetch_assoc($getTypes)){
    $typeid = $type['id'];
    $getdbdata = search($dbvalues, 'type', $typeid);
    while($category1 = mysqli_fetch_assoc($getCategories)){
        // DISPLAY DATA FROM $getdbdata
    }
}

【问题讨论】:

  • 你在哪里使用 search_r 函数返回的数组$subarray
  • 对不起,错误的功能。已更新。
  • 我觉得这是可以/应该通过JOIN 完成的事情。
  • 在这种情况下是否有某种关于 JOIN 的示例或解释?
  • 我们需要查看您的表格结构。

标签: php arrays search multidimensional-array


【解决方案1】:

您应该在 MySQL 中执行此操作。

SELECT * FROM `Data`
LEFT JOIN `Type` ON `Type`.id = `Data`.type
LEFT JOIN `Category` ON `Category`.id = `Data`.category
WHERE `Data`.section = '$selectValue'

我猜的是表结构。此外,如果您需要检查每个表上的 selectValue,那么您需要将它们添加到查询的 WHERE 部分。

【讨论】:

  • 加入这些东西会做什么?在显示时我将如何使用这些信息(比如当我需要显示某种类型的项目时)。这与我已经在做的有什么不同?
  • 这是一个查询与您的 3 个查询。您可以添加到它的 WHERE 部分以限制结果。如果您想开始跨多个表对结果进行排序,它也非常有用。 dev.mysql.com/doc/refman/5.0/en/join.html
  • 是的,但我需要搜索特定类型的结果并相应地显示。那仍然是我需要帮助的地方。加入三个查询就好了,但我还是不知道如何正确显示结果。我上面的搜索功能不起作用。
猜你喜欢
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
相关资源
最近更新 更多