我有以下多维数组:
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 :(得分: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);