我有多维数组,我想在其中寻找一些特定的单词 这就是我的数组的样子
Array
(
[0] => Array
(
[sch_name] => Montfort School Roorkee
[sch_degree] => High School
[sch_field] => Commerce
[sch_grade] => A+
[sch_from_year] => 2007
[sch_to_year] => 2015
[sch_desc] => Montfort School was very nice
)
[1] => Array
(
[sch_name] => City Public
[sch_degree] => 12
[sch_field] => Commerce
[sch_grade] => 12
[sch_from_year] => 2007
[sch_to_year] => 2015
[sch_desc] => Great School
)
)
现在假设我想找到' montfort'这个多维数组中的单词
所以我尝试使用这个功能
function searchForWord($id, $array) {
foreach ($array as $key => $val) {
if ($val['sch_name'] === $id) {
return $key;
}
}
return null;
}
echo $id = searchForWord('montfort', $p);
除了当我写下蒙福特学校的Roorkee'结果被发现,为什么这些词是如此敏感是否有任何其他方式来获得价值
我不能像在mysql查询中那样使用像%keyword
这样的东西答案 0 :(得分:1)
试试这个:
$cols = array_column($your_array,'sch_name');
$keys = [];
foreach ($cols as $k=>$v) {
if (strpos(strtolower($cols[$k]),strtolower('Mont'))!==false) {
$keys[]=$k;
}
}
print_r($keys);
将$ your_array替换为您的数组。
它不区分大小写并且会匹配任何部分内容。你可以把它变成这样的函数:
function SearchArrayForKeys($array,$column_name,$search) {
if (!$array||!is_array($array)) {
return [];
}
$cols = array_column($array,$column_name);
if (!$cols){
return [];
}
$keys = [];
foreach ($cols as $k=>$v) {
if (strpos(strtolower($cols[$k]),strtolower($search))!==false) {
$keys[]=$k;
}
}
return $keys;
}
用法:
$keys = SearchArrayForKeys($your_array,'sch_name','Mont');
答案 1 :(得分:0)
在你的代码中,你实际上是在尝试一个完整的字符串匹配if ($val['sch_name'] === $id)
,除非输入的搜索模式是整个字符串,否则它不会返回true。
要从字符串中查找部分字符串,请使用strpos(<string>,<pattern>)
。
例如:
<?php
$needle='Montfort';
$haystack='Montfort School was very nice';
if(strpos($haystack,$needle)!==false){
print("Found");
}
else{
print("Not Found");
}
?>
此外,如果您想要不区分大小写的比较,请在strtolower
匹配中使用的两个字符串上使用strpos
。
例如:if(strpos(strtolower($haystack),strtolower($needle))!==false)