2012-11-05 82 views
0

我們有一個數組的搜索,例如:PHP在陣列

$my_array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering'); 

現在我有一個「$ Q」變量,我想數組的值之間進行搜索,刪除不包含密鑰$ q,這裏是我的代碼:

foreach($my_array as $key => &$value){ 
    if (stripos(($value), $q) === false){ 
     unset($my_array[$key]); 
    } 
} 

現在如果我們設置$ q = '能效比':

var_dump($my_array); 
array 
    0 => string 'Software Engineering' (length=20) 
    1 => string 'Civil Engineering' (length=17) 
    2 => string 'Hardware Engineering' (length=20) 
    3 => &string 'BL AH Engineering' (length=17) 

正如你看到的,沒有被刪除,因爲所有的$值有 '能效比'在「工程」 它是確定的,但現在我設置$q = 'eer civil',現在:

var_dump($my_array); 
array 
    empty 

所有項目被刪除,但實際上「土木工程」既包含了「能效比」和「民間」的,所以應該不會被刪除,我怎麼能做到這一點?我可能用'空格'來爆炸$ q,但它不起作用。

在此先感謝

+0

向我們展示您使用的代碼s'explode' – Petah

回答

2

使用explode應該工作:

更新

使用preg_splittrim擺脫多/前導/尾隨分隔符。

$array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering'); 
$query = ' eer civil '; 
$query = preg_split('/\s+/', trim($query)); 
foreach ($array as $key => $value) { 
    foreach ($query as $q) { 
     if (stripos($value, $q) === false) { 
      unset($array[$key]); 
      break; 
     } 
    } 
} 
var_dump($array); 

http://codepad.org/r3jJX1aP

+0

set q ='eer',注意'eer'後面的空格,'eer'應該全部返回並且不爲空 – behz4d

+0

@ behz4d看到我更新的答案 – Petah

0

如果要檢查多個值,把它們放入數組,所以$q將是一個字符串數組,而不是一個字符串,像這樣:

$q = array('eer'); // USE THIS FOR ONE parameter 
//$q = array('Civil,'eer'); //USE THIS for several 
foreach($my_array as $key => &$value){ 
    foreach($q as $qval) { 
     if (stripos(($value), $qval) === false){ 
      unset($my_array[$key]); 
     } 
    } 
} 
+0

現在設置q = 'eer'(注意eer之後的空間,這是破壞這個的通常情況,'eer'應該帶來所有的價值,但是它會重新空出來!) – behz4d

1

「。5.從陣列的鍵和值用單詞檢索數組」 explode應該解決您的問題

<?php 

$my_array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering'); 

$str = "eer Software"; 
$str = explode(' ', $str); 

foreach ($my_array as $key => $result) { 
    foreach($str as $q){ 
     if (stripos(($result), $q) === false){ 
      unset($my_array[$key]); 
     } 
    } 
} 

var_dump($my_array); 
?>