【问题标题】:Get array value for a specific key [duplicate]获取特定键的数组值[重复]
【发布时间】:2020-01-06 03:11:04
【问题描述】:

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

我正在做以下事情:

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
        )
)

【问题讨论】:

  • 循环检查meta_key是否为first_name,然后得到值?我能想到的最明显的选择。 array_searcharray_column 也可能是一个选项。
  • 您可以使用 foreach() 遍历对象,直到找到定义的元值。 PHP中有一些函数可以返回数组的下(第一个)元素和上(最后一个)元素。
  • 通常你会使用foreachif 来处理这类事情。理想情况下是break,一旦搜索结束
  • 您是否也检索其他信息或仅检索first_name
  • 这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?否则,请考虑标记最能解决您的问题的答案(上/下投票箭头下的复选标记)。见stackoverflow.com/help/someone-answers

标签: php


【解决方案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

【讨论】:

    【解决方案2】:

    foreach

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 2011-09-21
      • 2016-12-02
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多