我在获取数组中匹配值的键时遇到了一些问题。这是我的阵列,
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;
循环遍历数组,在;
上拆分,将第一个和最后一个部分存储到变量($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;
演示
获取值:
$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)));
因为我非常喜欢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;
}
});
其他答案也会起作用,但正如我所说,我非常喜欢数组函数,因为我发现它们比循环更优雅。
这应该会让你走上正轨。。。
$yourKey = null;
foreach ($arr as $key => $value) {
if($value == $someSearchQuery){
$yourKey = $key;
}
}