【问题标题】:PHP: What is the best method to SQL query an array? (if you can)PHP:SQL 查询数组的最佳方法是什么? (如果你可以的话)
【发布时间】:2011-04-02 03:10:48
【问题描述】:

考虑一下:

一个包含表、行和数据的 mySQL 数据库。

具有相同数据的一个数组。

现在通常情况下,我会对 mySQL SELECT * FROM 'table' WHERE name LIKE '%abc%' 进行这样的查询

但我想对数组执行相同的查询,而不必插入它。想到的唯一方法是使用array_search,但语法不同,方法复杂。

这里有捷径吗?

【问题讨论】:

标签: php mysql arrays


【解决方案1】:

您不能将 SQL 与数组一起使用,但您可以使用array_filter()

function like_abc($v) {
    return strstr($v['name'], 'abc') !== false;
}

$filtered = array_filter($yourArray, 'like_abc');

或者如果您使用的是 PHP >= 5.3.0

$filtered = array_filter($yourArray, 
    function($v) { return strstr($v['name'], 'abc') !== false;});

ideone上查看它的实际应用


编辑:

你也可以试试PHPLinq:

// UNTESTED CODE!
$yourArray = array (
    array('name' => 'abcd', 'age' => 20),
    array('name' => 'dacb', 'age' => 45),
    array('name' => 'aadd', 'age' => 32),
    array('name' => 'babc', 'age' => 11),
    array('name' => 'afgb', 'age' => 17),
);

$result = from('$people')->in($yourArray)
            ->where('$people["name"] => strstr($people["name"], "abc") !== false')
            ->select('$people'); 

【讨论】:

  • 哇,LINQ 在 PHP 中的存在令人印象深刻。
【解决方案2】:

CakePHP 有一个Set::extract 方法,可以通过uses XPath query strings 查找信息。它非常好,我认为如果没有 CakePHP 项目的其余部分,使用它应该不会太难。

【讨论】:

    【解决方案3】:

    有一个sql4array 类允许您使用SQL 从PHP 数组中检索数据,尽管我从未使用过它,也无法评论它有多好。开发人员确实承认它很慢,并且不支持完整的 SQL 语法。

    如前所述,还有PHPLinq

    就个人而言,我倾向于使用 array_filter()

    【讨论】:

      【解决方案4】:

      不,没有捷径。您不能使用 SQL 查询数组。如果您的数组包含与数据库表相同的数据,那么它将是多维的,这意味着 array_search 没有用。您必须手动循环遍历数组并自己执行类似的操作,例如 preg_match。

      $data = array(
        array('name' => 'foo abc bar', 'lorem' => 'ipsum'),
        array('name' => 'etc', 'lorem' => 'dolor')
      );
      $matches = array();
      foreach ($data as $row) {
        if (preg_match('/^.*abc.*$/', $row['name']) {
          $matches[] = $row;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 1970-01-01
        • 2021-09-23
        • 2015-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多