Php 如何在多维数组中搜索
我有多维数组,我想在其中查找一些特定的单词 这就是我的阵列的外观Php 如何在多维数组中搜索,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有多维数组,我想在其中查找一些特定的单词 这就是我的阵列的外观 Array ( [0] => Array ( [sch_name] => Montfort School Roorkee [sch_degree] => High School [sch_field] => Commerce [sch_grade] => A+
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吗?试试这个:
$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_数组
它不区分大小写,将匹配任何部分。您可以将其设置为如下函数:
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');
在您的代码中,您实际上正在尝试一个完整的字符串匹配
if($val['schu name']==$id)
,除非输入搜索模式是整个字符串,否则它不会返回true
要从字符串中查找部分字符串,请使用strpos(,)
例如:
<?php
$needle='Montfort';
$haystack='Montfort School was very nice';
if(strpos($haystack,$needle)!==false){
print("Found");
}
else{
print("Not Found");
}
?>
另外,如果要进行不区分大小写的比较,请在strpos
匹配中使用的两个字符串上使用strtolower
例如:
if(strpos(strtolower($haystack),strtolower($needle))!==false)
请注意,这与数组无关:这是您对基本运算符的理解问题,例如====
if($val['schu name']==id)正在搜索精确匹配;您的$id
字符串必须与$val['schu name']
字符串完全匹配;但是$id
中的值只是要匹配的字符串的一部分,因此需要检查部分匹配if(stripos($val['schu name']),$id!==false){
。还要注意,strpos()
区分大小写;stripos()
区分大小写-insensitive@MarkBakerif(stripos($val['schu name']),$id!==false){}给出了语法错误OK,所以我输入得太快:if(stripos($val['schu name'],$id)!==false){
@MarkBaker请将其写为答案,以便我可以向上投票并将其标记为答案$keys结果在空数组中