Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从通过wordpress查询获取的多维对象数组中删除重复项_Php_Object_Multidimensional Array_Duplicate Removal - Fatal编程技术网

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');