我知道很多关于这个问题的问题,但我找不到针对我的具体问题的正确答案。
我有一个搜索字符串 - “1 | 1”
我有一个包含以下值的数组 - “a”=> “1 | 1”,“b”=> “2 | 1,1 | 1”,“c”=> “3 | 2,2 | 1”
我想要做的只是找出数组中是否存在搜索字符串,它应该返回数组键。如果有多个数组项具有搜索字符串,则应返回所有数组项。
在这个例子中,我希望得到“a”和“b”,但是当我使用strpos()
时,它只给我“a”。
我该如何解决这个问题?
编辑**
这是我的代码
function array_search_i($str, $array)
{
$returnArray = array();
foreach ($array as $key => $value) {
if (strpos($str, $value) !== false) {
array_push($returnArray, $key);
}
}
return $returnArray;
}
答案 0 :(得分:2)
注意!==
运营商。我们还要检查类型..
$searchArray = array('2|2','1|1,3|3','1|1');
$search = '1|1';
foreach ($searchArray as $k=> $value) {
if (strpos($value,$search) !== false) {
$keysWithMatches[] = $k;
}
}
print_r($keysWithMatches);
答案 1 :(得分:2)
只需使用preg_grep。
print_r(preg_grep("/1\|1/", $array));
答案 2 :(得分:1)
$keys = array();
foreach($a as $k=>$v){
if(strpos($v,'1|1') !== false) $keys[] = $k;
}
答案 3 :(得分:0)
strpos
只会“找到第一次出现字符串的位置”。
看看array_keys
。我认为这将更接近你想要的。或者,如果它无法执行您可能需要的“部分匹配”,则可能必须使用array_map
或array_filter
。
答案 4 :(得分:0)
我能想到的最简单的方法是使用PHP本机函数array_key()。
以下是它的工作原理:
$array = array("a" => "1|1", "b" => "2|1,1|1", "c" => "3|2,2|1");
$result = array_keys($array,'1|1');
print_r($result);
// 'a' => '1|1'
更新:
print_r($array[$result[0]]); // Makes more sense.
// '1|1'
答案 5 :(得分:0)
你走了:
<?php
$array = Array("a" => "1|1", "b" => "2|1,1|1","c" => "3|1,2|1","d" => Array("a1" => "1|1"));
array_walk($array,"find");
function find($value, $key) {
if (!is_array($value)) {
if (preg_match("/\b1\|1\b/i",$value)) {
echo $key .'<br />';
}
}
else {
array_walk($value,"find");
}
}
?>
通过这个例子你会得到:
a
b
a1
答案 6 :(得分:0)
array_filter()就是您所需要的。请尝试以下代码。
$array = array("a"=>array("1|1"), "b"=>array("2|1","1|1"), "c"=>array("1|2"));
var_dump(array_keys(array_filter($array, function ($elem) { return in_array('1|1', $elem); } )));
array(2) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
}
答案 7 :(得分:0)
您可以使用带有search_value参数的array_keys来搜索数组中的所有值。
此示例将获取所有匹配的精确值的键:
<?php
$searchArray = array('2|2','1|1','1|1');
$search = '1|1';
print_r(array_keys($searchArray, $search));
?>
(OR)
此示例将获取所有部分值的键
<?php
foreach($array as $key => $val) {
if(strpos($val,'green') !== false) {
$resKeys[] = $key;
}
}
print_r($resKeys);
?>