获取特定键的数组值

时间:2019-09-03 08:27:41

标签: php

如果上面的meta_value等于meta_key,我想得到first_name的值,我该怎么做?

我正在做以下事情:

echo $name_data[1]['meta_value'];

这不起作用,因为meta_value并不总是处于[1]位置。

这是数据,其中有数百个条目,但数据却混合在一起(即,同一数据并不总是出现在0,1,2等数组中)。

Array
(
    [0] => Array
        (
            [umeta_id] => 3221
            [user_id] => 130
            [meta_key] => nickname
            [meta_value] => email@domain.com
        )

    [1] => Array
        (
            [umeta_id] => 3222
            [user_id] => 130
            [meta_key] => first_name
            [meta_value] => Jim
        )

    [2] => Array
        (
            [umeta_id] => 3223
            [user_id] => 130
            [meta_key] => last_name
            [meta_value] => Jones
        )
)

Array
(
    [0] => Array
        (
            [umeta_id] => 3221
            [user_id] => 130
            [meta_key] => nickname
            [meta_value] => email@domain.com
        )

    [1] => Array
        (
            [umeta_id] => 3222
            [user_id] => 130
            [meta_key] => first_name
            [meta_value] => John
        )

    [2] => Array
        (
            [umeta_id] => 3223
            [user_id] => 130
            [meta_key] => last_name
            [meta_value] => Jones
        )
)

2 个答案:

答案 0 :(得分:1)

您可以将array_searcharray_column结合使用,以找到适当的索引,以从以下位置获取值:

$k = array_search('first_name', array_column($array, 'meta_key'));
if ($k !== false) 
    $first_name = $array[$k]['meta_value'];

更笼统地说,您可以编写一个函数以返回给定键的值:

function get_value($array, $key) {
    $k = array_search($key, array_column($array, 'meta_key'));
    if ($k !== false) 
        return $array[$k]['meta_value'];
    else
        return '';
}

echo get_value($array, 'first_name') . PHP_EOL;
echo get_value($array, 'nickname') . PHP_EOL;

输出:

Jim
email@domain.com

Demo on 3v4l.org

答案 1 :(得分:0)

使用foreach

foreach($name_data as $meta_data){
    if("first_name" == $meta_data["meta_key"]){
        echo $meta_data["meta_value"];
    }
}