我在数组中获取匹配值的键有一些问题。这是我的数组,
Array
(
[0] => Array
(
[0] => 1001;vbaker;Test@test.com;Vern;Baker;
)
[1] => Array
(
[0] => 1002;Tesdsd;Test@test.com;Test;vbaker;
)
[2] => Array
(
[0] => 1003;demosa;demo@dime.com;Baker;Tesdsd;
)
)
所以这里举例来说,我想得到 1002 (值)的键 ..我怎么能得到那个......?
我的需求是,我只有id(比如1002)所以我必须得到像Tesdsd;Test@test.com;Test;vbaker;
答案 0 :(得分:1)
循环遍历数组,在;
上拆分,将第一个和最后一个部分存储到变量($first
和$last
)中,检查$first
是否与您的相同搜索字符串,如果是,则返回$last
:
$search = 1002;
foreach ($array as $key => $sub) {
list($first, $last) = explode(';', $sub[0], 2);
if ($first == $search) {
echo $last;
}
}
输出:
Tesdsd;Test@test.com;Test;vbaker;
答案 1 :(得分:1)
获取值:
$search = 1002;
$result = array_values(preg_grep("/$search/", call_user_func_array('array_merge', $array)))[0];
给出了:
1002;Tesdsd;Test@test.com;Test;vbaker;
然后您可以在explode()
上;
获取所需的部分。
要获取键/索引(即1),请尝试:
$search = 1002;
$key = key(preg_grep("/$search/", call_user_func_array('array_merge', $array)));
答案 2 :(得分:1)
因为我非常喜欢PHP的数组函数,所以这是我的2美分:
$search = '1003';
$matches = array_filter($array, function($v) use ($search) {
return strpos($v[0], $search) !== false;
});
echo 'The keys are: ' . implode(', ', array_keys($matches));
//编辑:
如果您实际上不需要键(正如您在原始问题中所述)但又想使用值,则可能是更好的方法:
$search = '1003';
array_walk($array, function($v, $k) use ($search) {
if ( strpos($v[0], $search) !== false )
{
// do whatever you want with the data
echo 'Found ' . ltrim($v[0], $search.';') . ' at key ' . $k;
}
});
其他答案也可以解决问题,但正如我所说,我是数组函数的忠实粉丝,因为我觉得它们比循环更优雅。
答案 3 :(得分:0)
这可以让你走上正确的轨道......
$yourKey = null;
foreach ($arr as $key => $value) {
if($value == $someSearchQuery){
$yourKey = $key;
}
}