2016-05-15 63 views
0

我有,我想寻找一些特别的话 这是我的阵列看起来像如何多维数组

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 
     ) 

) 

现在假设我想找到多维数组“蒙特福特”字搜索这个多维数组中

所以我尝试使用此功能

function searchForWord($id, $array) { 
    foreach ($array as $key => $val) { 
     if ($val['sch_name'] === $id) { 
      return $key; 
     } 
    } 
    return null; 
} 
echo $id = searchForWord('montfort', $p); 

它毫无结果,但是当我写了“蒙特福特学校鲁尔基”结果w ^如发现,为什么这些字是如此敏感是有任何其他方式来获得价值

我不能使用的东西,就像我们在MySQL查询不喜欢%的关键字

+0

注意,这是无关的数组:它与你的基本运营商的理解一样''===' –

+0

如果($ VAL [ 'sch_name'] === $问题id)'正在搜索完全匹配;你的'$ id'字符串必须与'$ val ['sch_name']'字符串完全匹配;但'$ id'中的值只是您想要匹配的字符串的一部分,所以您需要检查部分匹配。 'if(stripos($ val ['sch_name']),$ id!== false){'。还要注意'strpos()'是区分大小写的; 'stripos()'不区分大小写 –

+0

@MarkBaker if(stripos($ val ['sch_name']),$ id!== false){}给出语法错误 –

回答

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'); 
+0

$ keys结果为空数组 –

+0

你试过我更新的代码? –

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)