2014-01-14 26 views
0

在查看了很多關於php數組的問題之後,我仍然無法解決我的問題。php部分關鍵字在多維數組中搜索並刪除過時的數組級別

我的目標是搜索數組進行部分匹配,並將這些結果存儲到新數組中。我正在使用的數據是國家信息,地區信息和城市信息。

我有一樣返回數據3個SQL查詢: [名] [動作] [值] 阿姆斯特丹,城市,阿姆斯特丹 荷蘭,國家,NL 荷蘭,國家,NL

結果檢索然後合併成一個陣列,

$smartsearcharray = array(); 
array_push($smartsearcharray, $results_countries); 
array_push($smartsearcharray, $results_provinces); 
array_push($smartsearcharray, $results_cities); 

然而陣列看起來像

Array 
(
[0] => Array 
    (
     [0] => Array 
      (
       [name] => andorra 
       [action] => country 
       [value] => AD 
      ) 

     [1] => Array 
      (
       [name] => argentina 
       [action] => country 
       [value] => AR 
      ) 

[1] => Array 
    (
     [0] => Array 
      (
       [name] => canillo 
       [action] => province 
       [value] => AD-02 
      ) 

     [1] => Array 
      (
       [name] => andorra la vella 
       [action] => province 
       [value] => AD-07 
      ) 

如果要合併的陣列0和陣列1,因爲它們包含RecursiveIteratorIterator

失敗相同的結構我想遞歸array_walk,使用strpos,preg_grep和組合,但他們往往會由於額外的陣列漁政船。

對於我應該使用的函數或技巧有何建議?

非常感謝

/編輯:解決方案

$res_arr = array(); 

foreach($smartsearcharray as $item) 
{ 
    if(stripos($item['name'], $search_word) !== false) { 

    $res_arr[] = array(
      'name'  => $item['name'], 
      'action' => $item['action'], 
      'value'  => $item['value'] 
      ); 
    } 
} 

print_r($res_arr); 
+0

試試這個:http://stackoverflow.com/a/20919377/270037 –

+0

所以,你是否試圖合併三個數組?將它們組合成一個數組,而不是將它們添加到新的數組中? array_merge()可能是你要找的東西:http://nl3.php.net/manual/en/function.array-merge.php –

+0

你不能以更方便的方式從數據源請求/獲取記錄嗎?格式? – VolkerK

回答

0

第1部分,通過陣列解決數組合並,而不是array_push

$results_countries = $this->model_search_smartsearch->buildCountries(); 
$results_provinces = $this->model_search_smartsearch->buildProvinces(); 
$results_cities = $this->model_search_smartsearch->buildCities(); 

$smartsearcharray = array(); 
$smartsearcharray = array_merge($results_countries, $results_provinces, $results_cities); 

第2部分,搜索陣列值,如果它匹配將信息存儲在較小/新陣列中

$res_arr = array(); 

foreach($smartsearcharray as $item) 
{ 
    if(stripos($item['name'], $search_word) !== false) { 

    $res_arr[] = array(
      'name'  => $item['name'], 
      'action' => $item['action'], 
      'value'  => $item['value'] 
      ); 
    } 
} 

print_r($res_arr);