Php 从通过wordpress查询获取的多维对象数组中删除重复项
我试图根据查询获取Php 从通过wordpress查询获取的多维对象数组中删除重复项,php,object,multidimensional-array,duplicate-removal,Php,Object,Multidimensional Array,Duplicate Removal,我试图根据查询获取POST数据,但得到重复的结果。我尝试了常规排序,但仍然显示了许多重复项。我该怎么办 我的代码(如下所示)在foreach循环中打印重复的对象ID。这里,object\u id=2423重复。我想保留一个,删除另一个 $vbn = $wpdb->get_results($query_cat_filter); $bbc = array_unique($vbn, SORT_REGULAR); foreach( $bbc as $cOM){ print_r($bbc)
POST
数据,但得到重复的结果。我尝试了常规排序,但仍然显示了许多重复项。我该怎么办
我的代码(如下所示)在foreach
循环中打印重复的对象ID。这里,object\u id=2423
重复。我想保留一个,删除另一个
$vbn = $wpdb->get_results($query_cat_filter);
$bbc = array_unique($vbn, SORT_REGULAR);
foreach( $bbc as $cOM){
print_r($bbc);
}
输出:
Array
(
[0] => stdClass Object
(
[object_id] => 2415
[term_taxonomy_id] => 242
[term_order] => 0
)
[1] => stdClass Object
(
[object_id] => 2423
[term_taxonomy_id] => 242
[term_order] => 0
)
[2] => stdClass Object
(
[object_id] => 2423
[term_taxonomy_id] => 312
[term_order] => 0
)
)
如何删除这些重复值?可能有一个本机函数来执行此操作,但是,当我想按键组织时,我使用这样的函数。注意:我没有在对象上尝试过它,因此您可能必须首先使用
(array)
将对象转换为数组:
在这里,您只需使用每个数组的键[0]
$vbn = array(
(object)array(
'object_id' => 2135,
'term_taxonomy' => 242,
'term_order' => 0,
),
(object)array(
'object_id' => 3245,
'term_taxonomy' => 312,
'term_order' => 0,
),
(object)array(
'object_id' => 3245,
'term_taxonomy' => 242,
'term_order' => 0,
),
(object)array(
'object_id' => 5623,
'term_taxonomy' => 714,
'term_order' => 0,
)
);
新的数组可以关联,为简单起见,我选择了数值数组。重复数据消除代码 或 新FOREACH 结果 联想的
结果同上
var_export($vbn2);
foreach($vbn as $key => $obj){
$value = get_object_vars($obj);
$vbn2[$value['object_id']] = array('term_taxonomy'=>$value['term_taxonomy'],'term_order'=>$value['term_order']);
}
foreach($vbn2 as $key => $value){
echo "$key => " . $value['term_taxonomy'] . ', ' . $value['term_order'] . "\n";
}
array (
2135 =>
array (
'term_taxonomy' => 242,
'term_order' => 0,
),
3245 =>
array (
'term_taxonomy' => 242,
'term_order' => 0,
),
5623 =>
array (
'term_taxonomy' => 714,
'term_order' => 0,
),
)
如果你不介意一团难看的混乱重复数据消除完全相同,但结果很糟糕。
foreach($vbn as $obj) {
$vbn2[$obj->object_id] = (object) array($obj->term_taxonomy,$obj->term_order);
}
var_export($vbn2);
输出:array (
2135 =>
stdClass::__set_state(array(
'term_taxonomy' => 242,
'term_order' => 0,
)),
3245 =>
stdClass::__set_state(array(
'term_taxonomy' => 242,
'term_order' => 0,
)),
5623 =>
stdClass::__set_state(array(
'term_taxonomy' => 714,
'term_order' => 0,
)),
)
array (
2135 =>
stdClass::__set_state(array(
'object_id' => 2135,
'term_taxonomy' => 242,
'term_order' => 0,
)),
3245 =>
stdClass::__set_state(array(
'object_id' => 3245,
'term_taxonomy' => 242,
'term_order' => 0,
)),
5623 =>
stdClass::__set_state(array(
'object_id' => 5623,
'term_taxonomy' => 714,
'term_order' => 0,
)),
)
或
如果您不介意浪费内存foreach($vbn as $object) {
$vbn2[$object->object_id] = $object;
}
var_export($vbn2);
输出:array (
2135 =>
stdClass::__set_state(array(
'term_taxonomy' => 242,
'term_order' => 0,
)),
3245 =>
stdClass::__set_state(array(
'term_taxonomy' => 242,
'term_order' => 0,
)),
5623 =>
stdClass::__set_state(array(
'term_taxonomy' => 714,
'term_order' => 0,
)),
)
array (
2135 =>
stdClass::__set_state(array(
'object_id' => 2135,
'term_taxonomy' => 242,
'term_order' => 0,
)),
3245 =>
stdClass::__set_state(array(
'object_id' => 3245,
'term_taxonomy' => 242,
'term_order' => 0,
)),
5623 =>
stdClass::__set_state(array(
'object_id' => 5623,
'term_taxonomy' => 714,
'term_order' => 0,
)),
)
很简单:
foreach($vbn as $object) {
$result[$object->object_id] = $object;
}
如果以后要对关键点重新排序:
$result = array_values($result);
或者,如果您不介意获取数组而不是对象,请在get\u results
中使用ARRAY\u A
(PHP>=5.5.0需要ARRAY\u列
):
由于
术语分类法\u id
值不同,您如何知道要保留哪一个?或者这不重要?此重复值是由于两个查询的合并数组而出现的,因此在我的示例中,242是父类别id,312是其子类别,因此其在两个位置都显示为其分配的重复值。我们是否需要删除其中的任何一个?分类id在这里并不重要,因为meNo需要get\u object\u vars
。为什么不干脆$vbn2[$obj->object_id]=$obj
?@AbraCadaver#1。输出是一个混乱和丑陋的,见我的文章结束#2.通过复制对象id来浪费空间,。和#3。数组比objectsconcept看起来更容易和更干净。是的,考虑到只有一个概念可供选择。
foreach($vbn as $object) {
$vbn2[$object->object_id] = $object;
}
var_export($vbn2);
array (
2135 =>
stdClass::__set_state(array(
'object_id' => 2135,
'term_taxonomy' => 242,
'term_order' => 0,
)),
3245 =>
stdClass::__set_state(array(
'object_id' => 3245,
'term_taxonomy' => 242,
'term_order' => 0,
)),
5623 =>
stdClass::__set_state(array(
'object_id' => 5623,
'term_taxonomy' => 714,
'term_order' => 0,
)),
)
foreach($vbn as $object) {
$result[$object->object_id] = $object;
}
$result = array_values($result);
$vbn = $wpdb->get_results($query_cat_filter, ARRAY_A);
$vbn = array_column($vbn, null, 'object_id');
//or for only `object_id`
$vbn = array_column($vbn, 'object_id');