2016-05-15 88 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)