如何从无键多维数组中基于相邻键获取特定值?

时间:2018-08-10 04:28:21

标签: php multidimensional-array

考虑以下数组:

$serviceNames =  array(
    0    =>  array(
        'language'    => 'en',
        'value'       => 'something',
        'type'        => 'name',
    ),
    1    =>  array(
        'language'    => 'fi',
        'value'       => 'jotain',
        'type'        => 'name',
    ),
    2    =>  array(
        'language'    => 'sv',
        'value'       => 'någonting',
        'type'        => 'name',
    ),
);

我需要获取基于语言的“值”定义。有问题的部分是数组$serviceNames没有预定义的长度(最初是来自API的JSON文件),并且项可以按任何顺序排列(在我的示例中为en,fi,sv ,但可能是de,en,sv,fr ...明白了。

如果我想在“语言”等于“ en”的数组中获取“值”,我该怎么做?

4 个答案:

答案 0 :(得分:2)

我的建议是使数组具有关联性。
完成后,您可以通过"serviceBus": { // The maximum number of concurrent calls to the callback the message // pump should initiate. The default is 16. "maxConcurrentCalls": XYZ, } 访问该值。

["language"]["value"]

https://3v4l.org/ssGQa

答案 1 :(得分:1)

简单:

$serviceNames =  array(
0 =>  array(
    'language'    => 'en',
    'value'       => 'something',
    'type'        => 'name',
),
1 =>  array(
    'language'    => 'fi',
    'value'       => 'jotain',
    'type'        => 'name',
),
2 =>  array(
    'language'    => 'sv',
    'value'       => 'någonting',
    'type'        => 'name',
),
);
function myfunction(array $serviceNames, $field)
{
   foreach($serviceNames as $service)
   {
      if ( $service['language'] === $field )
         return $service['value'];
   }
   return false;
}
echo myfunction($serviceNames, 'en');

输出将为something

答案 2 :(得分:0)

您将必须使用foreach语句遍历数组的每个元素。

类似:

function getValueForLang($lang, array $arr)
{ 

    foreach ($arr as $desc) {
        if ($desc['language'] == $lang) {
            return $arr['value'];
        }
    }
    return null;
 }
 getValueForLang('en', $serviceNames); // gets your value, null if not found

另请参阅:

https://secure.php.net/manual/en/control-structures.foreach.php

答案 3 :(得分:0)

您可以使用array_search()array_column()功能。首先找到数组中“ en”所在的键,然后获取值。

$key = array_search('en', array_column($serviceNames, 'language'));
echo $serviceNames[$key]['value'];

Demo