我有一个多维数组。它们的单独数组的键是文本。我想知道如何将键与来自循环SELECT数据的字符串的一部分匹配。
数组示例
sftp://
因此,从此数组Array ( [Volvo] => Array ( [0] => )
[Ford] => Array ( [0] => )
[Seat] => Array ( [0] => ) )
,我如何匹配来自$cars
查询的数据
选择输出 SELECT
沃尔沃,梅赛德斯,雷克萨斯
我在追求什么
如果我的某个数组的键与我的select查询中的部分字符串匹配,那么正如沃尔沃上面的例子说的那样匹配,然后做一些事情。对我而言,在该阵列中添加更多数据。
我尝试了echo $row['car'];
,in_array
和array_search
的各种变体,但未找到适合我的解决方案。
我通过array_filter
循环执行的操作的反向示例
foreach
答案 0 :(得分:1)
这应该适合你:
首先,我使用preg_split()
将搜索字符串(Volvo, Mercedes, Lexus
)拆分为数组。
正则表达式:
/\s*,\s*/
简单地表示:
这可以确保我们的字符串中的搜索字词没有空格。因此,我们将以这样的数组结束:
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
Foreach
与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);
这可能不是最有效的,但应该给你想要的结果
答案 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])
。