PHP - 从每个子数组中获取特定元素而不进行循环

时间:2013-04-25 10:20:01

标签: php

在php中有一种方法可以从每个子数组中获取一个元素,而不必循环 - 从效率的角度思考。

说出以下数组:

$array = array(
    array(
        'element1' => a,
        'element2' => b
    ),
    array(
        'element1' => c,
        'element2' => d
    )
);

我想要来自$ array

的所有'element1'值

4 个答案:

答案 0 :(得分:4)

根据所需的输出,有许多不同的功能可以在阵列上运行......

$array = array(
    array(
       'element1' => 'a',
       'element2' => 'b'
   ),
   array(
       'element1' => 'c',
       'element2' => 'd'
   )
);

// array of element1s : array('a', 'c')
$element1a = array_map(function($item) { return $item['element1']; }, $array);

// string of element1s : 'ac'
$element1s = array_reduce($array, function($value, $item) { return $value . $item['element1']; }, '');

// echo element1s : echo 'ac'
array_walk($array, function($item) {
    echo $item['element1'];
});

// alter array : $array becomes array('a', 'c')
array_walk($array, function(&$item) {
    $item = $item['element1'];
});

有用的文档链接:

答案 1 :(得分:2)

您可以使用 array_map

尝试以下代码......

$arr = $array = array(
    array(
       'element1' => a,
       'element2' => b
   ),
   array(
       'element1' => c,
       'element2' => d
   )
);

print_r(array_map("getFunc", $arr));

function getFunc($a) 
{ 
    return $a['element1']; 
}

请参阅 Codepad

但我认为array_map也会在内部使用循环。

答案 2 :(得分:2)

如果您运行的是PHP 5.5(目前可以使用beta-4),那么

$element1List = array_column($array, 'element1');

应该将$ element1List作为$ array

中每个元素的element1值的简单数组
$array = array(
    array(
       'element1' => a,
       'element2' => b
   ),
   array(
       'element1' => c,
       'element2' => d
   )
);

$element1List = array_column($array, 'element1');
print_r($element1List);

给出

Array
(
    [0] => a
    [1] => c
)

答案 3 :(得分:0)

没有循环?递归!

$array = array(
        array(
                'element1' => 'a',
                'element2' => 'b'
        ),
        array(
                'element1' => 'c',
                'element2' => 'd'
        )
);

function getKey($array,$key,$new = array()){
    $count = count($array); 
    $new[] = $array[0][$key];
    array_shift($array);

    if($count==1)
        return $new;

    return getKey($array,$key,$new);
}

print_R(getKey($array,'element1'));

据我所知,维基百科Recursion不是循环。