减少多维数组

时间:2011-03-16 17:09:55

标签: php

我有以下多维数组:

Array
(
    [0] => Array
        (
            [area] => 5
            [estante] => 5
            [anaquel] => 5
            [no_caja] => 5
            [id_tipo] => 3
            [nombre_tipo] => Administrativo
        )
[1] => Array
    (
        [area] => 5
        [estante] => 5
        [anaquel] => 5
        [no_caja] => 5
        [id_tipo] => 1
        [nombre_tipo] => Copiador
    )

[2] => Array
    (
        [area] => 5
        [estante] => 5
        [anaquel] => 5
        [no_caja] => 5
        [id_tipo] => 2
        [nombre_tipo] => Judicial
     )

)

我希望通过它们之间具有所有不同的值(交集)来减少它。数组的维度可能会改变(我正在从数据库中检索信息)。我曾经想过使用像array_reduce和array_intersect这样的函数,但是我遇到的问题是它们只适用于一维数组,我找不到将这些函数的无限(不是以前已知)参数传递给它的方法。我希望有这样的输出:

Array([0]=>Copiador, [1]=>Administrativo, [2]=>Judicial).

我该怎么做?

提前致谢。

4 个答案:

答案 0 :(得分:0)

$reduced = array();
foreach ($oldarray as $value) {
    $reduced[] = $value['nombre_tipo'];
}

虽然,更好的解决方案可能只是修改您的SQL查询,以便您开始获得正确的数据。

注意:您也可以使用array_reduce,但我个人更喜欢上面的方法。

$reduced = array_reduce($oldarray,
                        function($a, $b) { $a[] = $b['nombre_tipo']; return $a; },
                        array()
                       );

答案 1 :(得分:0)

$arr=array(
  array (
    'area' => 5 ,
    'estante' => 5 ,
    'anaquel' => 5,
    'no_caja' => 5,
    'id_tipo' => 3,
    'nombre_tipo' => 'Administrativo'),
  array (//etc.
  )
); 

$fn=function(array $a, $k){
    if(array_key_exists($k,$a)) return $a[$k];
};

$b=array_map($fn,$arr,array_fill(0,count($arr),'nombre_tipo'));
print_r($b);

/*
Array
(
    [0] => Administrativo
    [1] => Copiador
    [2] => Judicial
)
*/

答案 2 :(得分:0)

此任务正是array_column()的用途 - 提取柱状数据。

请致电:

var_export(array_column($your_array, 'nombre_tipo'));

这将输出您想要的三元素数组。 ...我不理解你想要的输出中的排序。

答案 3 :(得分:0)

好像你想要array_map


$newArr = array_map(function($a) {
    return $a['nombre_tipo'];
}, $oldArr);

var_dump($newArr);