2011-03-16 97 views
0

我有以下多维数组:减少多维数组

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). 

我该怎么做?

在此先感谢。

+0

目前尚不清楚你的问题是什么 - 究竟什么是你想怎么办?为什么“Array([0] => Copiador,[1] => Administrativo,[2] =>司法)”不起作用? – Fraser 2011-03-16 17:14:57

+0

是否有任何具体的计算来获得输出? – Gaurav 2011-03-16 17:16:22

+0

我遇到的问题是数组不是一维数组。问题是,我如何减少它以获得想要的输出? – EmCo 2011-03-16 17:32:31

回答

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 
) 
*/ 
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() 
         ); 
+0

感谢您的回答,但是,如果我没有错,您将$ oldarray视为一维数组,在我的情况下,我有一个多维数组。 – EmCo 2011-03-16 17:40:40

+0

@ user521631我把它当作你发布在你的问题中的数组:) – mfonda 2011-03-16 17:41:47