我有一个这样的数组:
$a = array(
0 => array('type' => 'bar', 'image' => 'a.jpg'),
1 => array('type' => 'food', 'image' => 'b.jpg'),
2 => array('type' => 'bar', 'image' => 'c.jpg'),
3 => array('type' => 'default', 'image' => 'd.jpg'),
4 => array('type' => 'food', 'image' => 'e.jpg'),
5 => array('type' => 'food', 'image' => 'f.jpg'),
6 => array('type' => 'food', 'image' => 'h.jpg')
)
如何计算出独特的类型值(食物,条形和默认值)?我可以在foreach循环中遍历数组但是有更好的方法吗?
答案 0 :(得分:10)
在PHP> = 5.3中使用匿名函数:
$unique_types = array_unique(array_map(function($elem){return $elem['type'];}, $a));
对于以前的版本,您可以声明一个单独的函数:
function get_type($elem)
{
return $elem['type'];
}
$unique_types = array_unique(array_map("get_type", $a));
答案 1 :(得分:10)
使用PHP> = 5.5,你可以这样做:
$ar = array_unique(array_column($a, 'type'));
print_r($ar)
:
Array (
[0] => bar
[1] => food
[3] => default
)
答案 2 :(得分:2)
一种老式的方式,没有使用花哨的array_*
函数。这种方式简单易懂。你不会想知道发生了什么,因为它很直接。
$a = array(
0 => array('type' => 'bar', 'image' => 'a.jpg'),
1 => array('type' => 'food', 'image' => 'b.jpg'),
2 => array('type' => 'bar', 'image' => 'c.jpg'),
3 => array('type' => 'default', 'image' => 'd.jpg'),
4 => array('type' => 'food', 'image' => 'e.jpg'),
5 => array('type' => 'food', 'image' => 'f.jpg'),
6 => array('type' => 'food', 'image' => 'h.jpg')
);
$types = array();
foreach($a as $key => $type) {
if(! isset($types[$type['type']]))
$types[$type['type']] = $type['type'];
}
var_dump($types);
答案 3 :(得分:1)
试试这个
$uniqueA = array_unique($a, "type");
// then to output the array just type
print_r($uniqueA);
答案 4 :(得分:0)
您也可以使用array_reduce。
如果属性的值是数组或对象,则这不起作用,因为那些不能设置为数组的键。
function array_unique_attr($arr, $key) {
return array_keys( array_reduce($arr, function($newArr, $event) {
$newArr[$key] = true;
return $newArr;
}, []) );
}
$unique_types = array_unique_attr($a, 'type');