2011-03-16 150 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