我需要確定數組中是否存在字符串值,但不一定是實際的數組值。在每個數組元素上運行「strpos」
$array = array(
0 => 'blue',
1 => 'red',
2 => 'green',
3 => 'red'
);
$key = xxxxxx('gr', $array); // $key = 2;
有一個內置的方式用PHP來做到這一點
我需要確定數組中是否存在字符串值,但不一定是實際的數組值。在每個數組元素上運行「strpos」
$array = array(
0 => 'blue',
1 => 'red',
2 => 'green',
3 => 'red'
);
$key = xxxxxx('gr', $array); // $key = 2;
有一個內置的方式用PHP來做到這一點
您可以使用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);
?>
功能: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'
)
沒有內置的功能,但由於preg_*
功能支持數組參數可以這樣:
$keys = preg_filter('~gr~', '$0', $array);
循環遍歷數組並檢查各項目,然後返回索引,如果它。
function substr_in_array($array, $substr) {
foreach ($array as $index => $item) {
if (strrpos($item, $substr)!===FALSE && $item != $substr) {
return $index;
}
}
}
這應該做你想做的。
您的xxxxxx
將是array_map
。但是,唉,你不能在這裏使用strpos
作爲簡單的回調。要通過實際的搜索參數,你需要定義一個定製的或匿名函數 -
而要得到你想要的,你需要更多的包裝依舊:
$key = key(
array_filter(
array_map(
function($s){return strpos($s, "gr");},
$array
),
"is_int")
);
這給你但是搜索索引2
。
foreach是怎麼回事?
function xxxxxx($str, $array) {
foreach ($array as $key => $value) {
if (strpos($value, $str) !== false) {
return $key;
}
}
return false;
}
這個方法對於我之後的工作非常完美。我稍微改變了它,所以我可以餵食單針和多針。 函數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
它使用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);
?>
隨着PHP 5.3則可以使用array_filter和匿名函數做,在一個命令:
$keys = array_filter($array, function($var){ return strpos($var, 'gr') !== false; });
通過使用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
響應的改進版本。
你是什麼意思與$ key = 2?你想找到一定的價值或某個關鍵? – markus 2011-05-03 13:10:04