PHP数组忽略重复值
在这个分组数组中,忽略customer_name的重复项的最佳方法是什么?我只想显示唯一名称的列表PHP数组忽略重复值,php,Php,在这个分组数组中,忽略customer_name的重复项的最佳方法是什么?我只想显示唯一名称的列表 Array ( [1] => Array ( [0] => Array ( [model_id] => 1 [work_order] => 10999 [id] => 1
Array
(
[1] => Array
(
[0] => Array
(
[model_id] => 1
[work_order] => 10999
[id] => 1
[model_name] => STC1.5
[stock] => 3
[free] => 1
[customer_name] => Jane Doe
)
[1] => Array
(
[model_id] => 1
[work_order] => 10998
[id] => 1
[model_name] => STC1.5
[stock] => 3
[free] => 1
[customer_name] => Jane Doe
)
)
)
假设您只关心唯一的名称,并且
$arr
是:
Array
(
[1] => Array
(
[0] => Array
(
[model_id] => 1
[work_order] => 10999
[id] => 1
[model_name] => STC1.5
[stock] => 3
[free] => 1
[customer_name] => Jane Doe
)
[1] => Array
(
[model_id] => 1
[work_order] => 10998
[id] => 1
[model_name] => STC1.5
[stock] => 3
[free] => 1
[customer_name] => Jane Doe
)
)
)
然后您可以使用:
$unique_names = array_keys(array_flip(array_column($arr[1],'customer_name')));
如果您关心微观优化,请尝试:
$unique_names = array();
foreach( $arr[1] as $v )
{
$unique_names[$v['customer_name']] = $v['customer_name'];
}
您可以仅使用名称with array_列创建一个数组,并在该列上使用array_unique。
然后使用array_intersect_键从主阵列获取相应的子阵列
$name = array_unique(array_column($arr[1], "customer_name"));
$unique = array_intersect_key($arr, $name);
您尝试过数组_unique()吗?这应该适用于
array\u unique($array,SORT\u REGULAR)代码>应该忽略哪个记录的可能重复,10998
或10999
?问题不清楚。您是否需要只获取不带重复项的customer\u name
s列表,还是需要删除数组中的一些条目以避免两个条目具有相同的customer\u name
?如果后一种情况是正确的,那么您应该定义忽略重复项的规则(除了它们具有相同的客户名称
)。检测到重复项时要保留哪些条目?第一个?最后一个?在id
中具有最小/最大值的一个?等。我需要显示所有客户名称的列表,除非它们是重复的。只要所有名称都是唯一的,显示哪一个并不重要。有更简单(可能更快)的方法来获取(唯一)名称列表。@axiac具体哪个部分效率低下?当我发表评论时,答案是使用带有用户函数回调的array\u map()
。