如何根据无密钥多维数组中的相邻键获取特定值?

Consider the following 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',
    ),
);

I need to get the 'value' definitions based on language. The problematic part is that the array $serviceNames does not have a predefined length (comes originally as a JSON file from an API), and the items can come in any order (in my example it goes like en, fi, sv, but it could be de, en, sv, fr... you get it).

If I wanted to get 'value' within the array where 'language' equals to 'en', how could I do that?

My advice is that you make the array associative.
Once that is done you access the value by ["language"]["value"].

$serviceNames = array_column($serviceNames, Null, "language");

echo $serviceNames["fi"]["value"];  //jotain
echo $serviceNames["en"]["value"];  //something
echo $serviceNames["sv"]["value"];  //någonting

https://3v4l.org/ssGQa

you would have to go through each elements of the array, using the foreach statement.

something like:

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

see also:

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

simple:

$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');

Output will : something

You can array_search() and array_column() function. first find the key where "en" is in the array then get the value.

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

Demo