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



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

数组

示例
Array ( [Volvo] => Array ( [0] => ) 
        [Ford] => Array ( [0] => ) 
        [Seat] => Array ( [0] => ) )

那么从这个数组$cars中,我如何匹配来自SELECT查询的数据

Select Output echo $row['car'];

沃尔沃、奔驰、雷克萨斯

我在找什么

如果其中一个数组的键与我的选择查询的字符串的一部分匹配,就像上面的例子所说的,Volvo将匹配,那么做一些事情。对我来说就是在数组中添加更多的数据

我已经尝试了in_array, array_searcharray_filter的变化,但没有找到适合我的解决方案。

通过foreach循环的反向示例

    $searchword = $array_element;
$result = array_filter($cars, function($var) use ($searchword) { return preg_match("/b$searchwordb/i", $var); });

取自:搜索包含字符串

的PHP数组元素

这应该可以为您工作:

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

正则表达式:

/s*,s*/

的意思是:

  • s*匹配任何空格字符[rntf]
    • 量词:*在0到无限次之间,尽可能多的次数,根据需要回馈[贪心]
  • 匹配字符,字面意思是
  • s*匹配任何空格字符[rntf]
    • 量词:*在0到无限次之间,尽可能多的次数,根据需要回馈[贪心]

这确保我们在字符串的搜索词中没有空格。这样我们就得到了这样一个数组:

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] => 
        )
)

有很多方法可以达到你的目标。我会使用函数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])

尝试使用PHP stripos,这是简单而有效的:

基础数据:

$array = Array ( [Volvo] => Array ( [0] => ) 
        [Ford] => Array ( [0] => ) 
        [Seat] => Array ( [0] => ) )
;
SQL data (string or array):
$row['car']; // string
$row //array of all SQL columns output
Foreach with stripos:
    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);

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

相关内容

  • 没有找到相关文章

最新更新