如何通过数组中的值获取关键字


how to get key by value in array

我在获取数组中匹配值的键时遇到了一些问题。这是我的阵列,

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;
    }
}