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

时间:2014-04-23 16:55:16

标签: php arrays

我在数组中获取匹配值的键有一些问题。这是我的数组,

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;

这样的其他值

4 个答案:

答案 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;

Demo

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