我需要查明数组值中是否存在字符串,但不一定是实际的数组值。
$array = array(
0 => 'blue',
1 => 'red',
2 => 'green',
3 => 'red'
);
$key = xxxxxx('gr', $array); // $key = 2;
使用PHP
是否有内置方法可以做到这一点答案 0 :(得分: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);
?>
答案 1 :(得分: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'
)
答案 2 :(得分:2)
您的xxxxxx
将是array_map
。但是,唉,你不能在这里使用strpos
作为普通回调。要传递实际的搜索参数,您需要定义自定义或匿名函数 -
为了得到你想要的东西,你还需要更多的包装:
$key = key(
array_filter(
array_map(
function($s){return strpos($s, "gr");},
$array
),
"is_int")
);
然而,这为您提供了搜索到的索引2
。
答案 3 :(得分:1)
没有内置函数,但由于preg_*
函数支持数组作为参数,因此应该有效:
$keys = preg_filter('~gr~', '$0', $array);
答案 4 :(得分:1)
foreach怎么样?
function xxxxxx($str, $array) {
foreach ($array as $key => $value) {
if (strpos($value, $str) !== false) {
return $key;
}
}
return false;
}
答案 5 :(得分:0)
答案 6 :(得分:0)
遍历数组并检查每个项目,然后返回索引。
function substr_in_array($array, $substr) {
foreach ($array as $index => $item) {
if (strrpos($item, $substr)!===FALSE && $item != $substr) {
return $index;
}
}
}
这应该做你想要的。
答案 7 :(得分:0)
使用strpos检查每个数组元素的foreach。
<?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);
?>
答案 8 :(得分:0)
使用PHP 5.3,您可以使用array_filter和匿名函数在一个命令中执行此操作:
$keys = array_filter($array, function($var){ return strpos($var, 'gr') !== false; });
答案 9 :(得分:0)
通过使用PHP&gt; = 5.3.0,您可以使用anonymous functions作为callback来使用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
响应的改进版本。