2012-01-19 91 views
0

我已經做了一些搜索並發現了類似的問題,但其中大多數都有字符串鍵而不是數字。基本上,這是我想達到的目標:關鍵字返回鍵的搜索數組

樣品陣列

Array (
     [0] => comments=DISABLED 
     [1] => img_carousel=red.jpg,yellow.png,blue.jpg 
     [2] => twitter=http://www.twitter.com 
) 

運行是這樣的:

$img_carousel = explode('=', $arr[array_search('img_carousel', $arr)]); 

將返回:

Array (
     [0] => img_carousel 
     [1] => red.jpg,yellow.png,blue.jpg 
) 

但是,它不併只返回0/FALSE。我猜這是因爲array_search搜索完全匹配而不是字符串中的關鍵字?

我試圖用preg_grep,不幸的是,我似乎無法理解正則表達式和搜索文字字符串已被證明是太困難了,我...:{

回答

2

你想是這樣的:

$img_carousel = explode('=', array_shift(preg_grep('/img_carousel=/', $arr))) 
+0

這將在嚴格的標準下發出警告,我想。 'array_shift()'接受一個數組引用作爲它的參數,並且你傳遞一個函數的輸出。 –

+0

好吧,它做了我一直在尋找的,但是,如果@邁克爾是正確的,你將如何遵守嚴格的標準?這將在PHP 5.3中工作嗎? – lemonpole

+1

@lemonpole將'preg_grep()'的輸出存儲到一個變量中,然後直接使用該變量作爲'array_shift()'的參數而不是'preg_grep()'調用。 –

2

,因爲PHP 5.3你可以的遵循此示例:

$result = array_filter($arr, function($e) { 
    return strpos($e, 'img_carousel') !== false; 
}); 

,或者如果您使用舊版本:

function ifElementContainsImgCarousel($e) 
{ 
    return strpos($e, 'img_carousel') !== false; 
} 
$result = array_filter($arr, 'ifElementContainsImgCarousel'); 
1

您可以使用array_filter得到包含關鍵字的元素。

array_filter($sample_array, function($var) use ($keyword) {return strpos($var, $keyword) !== false;}) 
+0

你是什麼樣的'$ keyword'? – zerkms

+0

@zerkms問題標題中的關鍵字,就像'img_carousel'。 – xdazz

+0

它應該如何傳遞給匿名函數變量作用域? – zerkms