2011-05-03 36 views
6

我需要確定數組中是否存在字符串值,但不一定是實際的數組值。在每個數組元素上運行「strpos」

$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 

$key = xxxxxx('gr', $array); // $key = 2; 

有一個內置的方式用PHP來做到這一點

+0

你是什麼意思與$ key = 2?你想找到一定的價值或某個關鍵? – markus 2011-05-03 13:10:04

回答

12

您可以使用preg_grep用於此目的

<?php 
$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 

//$key = xxxxxx('gr', $array); // $key = 2; 
$result=preg_grep("/^gr.*/", $array); 
print_r($result); 
?> 

DEMO

+0

甜蜜,那個演示網站也很酷:) – Webnet 2011-05-03 13:12:02

+2

如果可以的話,我會兩次贊成這個,因爲我記得PHP有一個'preg_grep()'函數! – 2011-05-03 13:12:22

+0

我想'preg_grep(「/^\/scripts \/GMC \/PNetT \ -5 \ .1 \ -SP1 \/PNetT。* /」,exec('ps -ef | grep GMC',$ output ));'但是當我知道結果存在時,它沒有找到結果....我是否正確地轉義了這個? – Webnet 2011-05-03 13:15:18

0

使用

array_walk與strpos

array_walk

+0

而且strpos的參數在哪裏? – 2011-05-03 13:13:45

2

功能:array_filter是你想要的。當指定的函數返回true時,它將只保留結果數組中的項目。

// return true if "gr" found in $elem 
// for this value 
function isGr($key, $elem) 
{ 
    if (strpos($elem, "gr") === FALSE) 
    { 
     return FALSE; 
    } 
    else 
    { 
     return TRUE; 
    } 
} 

$grElems = array_filter($array, "isGr"); 
print_r($grElems); 

結果:

array(
    2=>'green' 
) 
0

沒有內置的功能,但由於preg_*功能支持數組參數可以這樣:

$keys = preg_filter('~gr~', '$0', $array); 
0

循環遍歷數組並檢查各項目,然後返回索引,如果它。

function substr_in_array($array, $substr) { 
    foreach ($array as $index => $item) { 
     if (strrpos($item, $substr)!===FALSE && $item != $substr) { 
      return $index; 
     } 
    } 
} 

這應該做你想做的。

2

您的xxxxxx將是array_map。但是,唉,你不能在這裏使用strpos作爲簡單的回調。要通過實際的搜索參數,你需要定義一個定製的或匿名函數 -

而要得到你想要的,你需要更多的包裝依舊:

$key = key(
      array_filter(
      array_map(
       function($s){return strpos($s, "gr");}, 
       $array 
      ), 
      "is_int") 
     ); 

這給你但是搜索索引2

1

foreach是怎麼回事?

function xxxxxx($str, $array) { 
    foreach ($array as $key => $value) { 
    if (strpos($value, $str) !== false) { 
     return $key; 
    } 
    } 
    return false; 
} 
+0

這個方法對於我之後的工作非常完美。我稍微改變了它,所以我可以餵食單針和多針。 函數find($ haystack,$ needles){ $ needle = array_map('trim',explode(「,」,$ needles)); foreach($ needle as $ key => $ value){ if(strpos($ value,$ haystack)!== false){ return true; } } return false; } 然後我打電話就像find($ page,「home,about」); – 2011-08-02 08:35:39

0

它使用foreop檢查每個使用strpos的數組元素。

<?php 
$array = array(
     0 => 'blue', 
     1 => 'red', 
     2 => 'green', 
     3 => 'red' 
); 
$search='aaa'; 
function arraysearch($array,$search){ 
foreach ($array as $element){ 
if(strpos($element,$search)!==FALSE){ 
return TRUE; 
} 
} 
return FALSE; 
} 
echo arraysearch($array,$search); 
?> 
0

隨着PHP 5.3則可以使用array_filter和匿名函數做,在一個命令:

$keys = array_filter($array, function($var){ return strpos($var, 'gr') !== false; }); 
0

通過使用PHP> = 5.3.0,可以使用作爲anonymous functionscallback過濾該陣列與array_filter

$array = array(
    0 => 'blue', 
    1 => 'red', 
    2 => 'green', 
    3 => 'red' 
); 

$search = 'gr'; 

$key = array_filter($array, function($element) use($search) { 
    return strpos($element,$search) !== FALSE; 
}); 

這是Shay Ben Moshe響應的改進版本。

相關問題