Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在多维数组中搜索_Php_Arrays_Multidimensional Array - Fatal编程技术网

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结果在空数组中