是否有像array_column这样的PHP函数只返回单个值?

时间:2017-03-31 06:58:56

标签: php arrays

我循环遍历关联数组的实例(这些关联数组本身是数组的一部分)。

对于每个数组,我想根据键返回一个值。

目前我有:

$image_path = array_column($myarray, 'uri');

但当然array_column将其值存储在一个数组中,考虑到它只返回1个值,对我来说没用。

是否存在允许我根据提供的密钥获取值的现有函数?

例如:

$image_path = get_keys_value($myarray, 'uri');

示例数组。这是一个非常基本的例子。真实的东西有很多层次:

$myarray = array
  (
    'instance' => array(
      'type' => 'somedata',
      'content' => somedata',
      'image' => array(
         'name' => 'photo',
         'uri' => 'path/to/file.png'
      ),
    ),
  );

期望的结果:

$ image_path包含'path / to / file.png'字符串。

2 个答案:

答案 0 :(得分:1)

试试这个,

function array_column_recursive(array $haystack, $needle)
{
    $found = [];
    array_walk_recursive($haystack, function ($value, $key) use (&$found, $needle) {
        if ($key == $needle) {
            $found[] = $value;
        }
    });
    return $found;
}
echo array_column_recursive($myarray, 'uri')[0];

以下是code

array_column只能使用2级数组结构。

上面的数组将解决您的问题。

我希望这会有所帮助

答案 1 :(得分:0)

我猜你可以使用array_map

例如:

$arr = [
    [
        'root' => [
            'child1' => [
                'child2' => 123
            ]
        ]
    ],
    [
        'root' => [
            'child1' => [
                'child2' => 456
            ]
        ]
    ],
    [
        'root' => [
            'child1' => [
                'child2' => 789
            ]
        ]
    ],
    [
        'root' => [
            'child1' => [
                'child2' => 123
            ]
        ]
    ],
];

print_r(array_map(function($row) {
    // here goes expression to get required path
    return $row['root']['child1']['child2'];
}, $arr));

输出:

Array
(
    [0] => 123
    [1] => 456
    [2] => 789
    [3] => 123
)