【问题标题】:How to search in multi dimensional array如何在多维数组中搜索
【发布时间】:2016-05-15 14:02:25
【问题描述】:

我有多维数组,我想在其中查找一些特定的单词 这就是我的数组的样子

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);

结果什么都没有,但是当我写“Montfort School Roorkee”时,结果被发现了,为什么这些词如此敏感,还有其他方法可以获取值

我不能像我们在 mysql 查询中那样使用 %keyword 之类的东西

【问题讨论】:

  • 请注意,这与数组无关:这是您对===等基本运算符的理解的问题
  • if ($val['sch_name'] === $id) 正在搜索完全匹配;您的 $id 字符串必须与 $val['sch_name'] 字符串完全匹配;但$id 中的值只是您要匹配的字符串的一部分,因此您需要检查部分匹配。 if (stripos($val['sch_name']), $id !== false) {。另请注意,strpos() 区分大小写; stripos() 不区分大小写
  • @MarkBaker if (stripos($val['sch_name']), $id !== false) { } 给出语法错误
  • 好的,所以我打字太快了:if (stripos($val['sch_name'], $id) !== false) {
  • @MarkBaker 请将其写为答案,以便我投票并将其标记为答案

标签: php arrays multidimensional-array


【解决方案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');

【讨论】:

  • $keys 结果为空数组
【解决方案2】:

在您的代码中,您实际上是在尝试完整的字符串匹配 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");
   }
?>

此外,如果您想要不区分大小写的比较,请在 strpos 匹配中使用的两个字符串上使用 strtolower

例如:if(strpos(strtolower($haystack),strtolower($needle))!==false)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2016-09-19
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多