检查数组键是否与select查询中的数据匹配

时间:2015-08-11 15:59:48

标签: php arrays multidimensional-array

我有一个多维数组。它们的单独数组的键是文本。我想知道如何将键与来自循环SELECT数据的字符串的一部分匹配。

数组示例

sftp://

因此,从此数组Array ( [Volvo] => Array ( [0] => ) [Ford] => Array ( [0] => ) [Seat] => Array ( [0] => ) ) ,我如何匹配来自$cars查询的数据

选择输出 SELECT

沃尔沃,梅赛德斯,雷克萨斯

我在追求什么

如果我的某个数组的键与我的select查询中的部分字符串匹配,那么正如沃尔沃上面的例子说的那样匹配,然后做一些事情。对我而言,在该阵列中添加更多数据。

我尝试了echo $row['car'];in_arrayarray_search的各种变体,但未找到适合我的解决方案。

我通过array_filter循环执行的操作的反向示例

foreach

取自:Search for PHP array element containing string

3 个答案:

答案 0 :(得分:1)

这应该适合你:

首先,我使用preg_split()将搜索字符串(Volvo, Mercedes, Lexus)拆分为数组。

正则表达式:

/\s*,\s*/

简单地表示:

  • \ s * 匹配任何空格字符[\ r \ n \ t \ f]
    • 量词: * 在零和无限次之间,尽可能多次,根据需要回馈[贪婪]
  • 匹配字符,字面意思
  • \ s * 匹配任何空格字符[\ r \ n \ t \ f]
    • 量词: * 在零和无限次之间,尽可能多次,根据需要回馈[贪婪]

这可以确保我们的字符串中的搜索字词没有空格。因此,我们将以这样的数组结束:

Array
(
    [0] => Volvo
    [1] => Mercedes
    [2] => Lexus
)

之后我只从您的数组和我们刚刚创建的搜索数组中获取array_intersect_key()

代码:

<?php

    $arr = preg_split("/\s*,\s*/", $row["car"], -1, PREG_SPLIT_NO_EMPTY);

    if(($intersect = array_intersect_key($cars, array_flip($arr)))) {
        echo "Do stuff!";
        print_r($intersect);
    } else {
        echo "Drink a cup of tea";
    }

?>

输出:

Array
(
    [Volvo] => Array
        (
            [0] => 
        )

)

答案 1 :(得分:1)

尝试使用PHP stripos,它简单有效:

基础数据:

$array = Array ( [Volvo] => Array ( [0] => ) 
        [Ford] => Array ( [0] => ) 
        [Seat] => Array ( [0] => ) )
;

SQL数据(字符串或数组):

$row['car']; // string
$row //array of all SQL columns output

Foreachstripos

    foreach($array as $rowKey=>$rowArray){
        $rowKey = trim($rowKey);
        foreach($row as $sqlRow=>$sqlArray){
            $sqlRow = trim($sqlRow);
            if (stripos($rowKey,$sqlRow) !== false){
               ///values are the same in this key in the array and in the SQL output
            }
         }
     unset($sqlRow,$sqlArray);
    }
unset($rowKey,$rowArray);

这可能不是最有效的,但应该给你想要的结果

答案 2 :(得分:1)

有很多方法可以实现您的目标。我会使用函数explode()将从数据库中检索到的数据($row['car'])拆分成片段trim(),以确保标识的片段没有填充空格:

$brands = array_map('trim', explode(',', $row['car']));

现在,print_r($brands)应该显示一个数组,其值是示例数组中的候选键(下面称为$example)。

接下来,这取决于您想要匹配的内容以及您希望如何处理匹配。

使用array_intersect()$brands以及示例数组的键(参见函数array_keys())可以进行简单的识别。

$common = array_intersect($brands, array_keys($example));
foreach ($common as $key) {
    // Do something with $example[$key]
}

或者您可以直接在$brands上进行迭代,并检查该值是否为$example中的关键字:

foreach ($brands as $key) {
    if (array_key_exists($key, $example)) {
        // Do something with $example[$key]
    }
}

您也可以使用isset($example[$key]),而不是array_key_exists($key, $example])