Я пытаюсь получить POST
данные основаны на запросе, но я получаю повторяющиеся результаты. Я попытался сортировать регулярно, но все равно он показывает много дубликатов. Что я должен делать?
Мой код (как показано ниже) печатает повторяющиеся идентификаторы объектов в foreach
петля. Вот, object_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)
:
<?php
function organize($array = array(), $assockey = false,$forcerows = false)
{
if(!empty($array)) {
$i = 0;
foreach($array as $rows) {
if(is_array($rows)) {
foreach($rows as $key => $value) {
if(!empty($rows[$assockey])) {
$_key = $rows[$assockey];
$new[$_key][$i][$key] = $value;
}
}
}
$i++;
}
}
if(isset($new)) {
foreach($new as $key => $value) {
if(count($value) == 1) {
$keyName = array_keys($value);
$new[$key] = ($forcerows == true)? array_values($value):$value[$keyName[0]];
}
else {
$new[$key] = array_values($value);
}
}
}
return (isset($new))? $new : $array;
}
// Starting input
$vals = array(
'0' => array(
'object_id' => 2415,
'term_taxonomy_id' => 242,
'term_order' => 0,),
'1' => array(
'object_id' => 2423,
'term_taxonomy_id' => 242,
'term_order' => 0,
),
'2' => array(
'object_id' => 2423,
'term_taxonomy_id' => 312,
'term_order' => 0
)
);
// Organize by key
$arr = organize($vals,'object_id',true);
print_r($arr);
?>
Дает вам массив примерно так:
Array
(
[2415] => Array
(
[0] => Array
(
[object_id] => 2415
[term_taxonomy_id] => 242
[term_order] => 0
)
)
[2423] => Array
(
[0] => Array
(
[object_id] => 2423
[term_taxonomy_id] => 242
[term_order] => 0
)
[1] => Array
(
[object_id] => 2423
[term_taxonomy_id] => 312
[term_order] => 0
)
)
)
Отсюда вы можете просто использовать ключ [0]
каждого массива.
Достаточно просто:
foreach($vbn as $object) {
$result[$object->object_id] = $object;
}
И если вы хотите изменить порядок ключей впоследствии:
$result = array_values($result);
Альтернативно, если вы не против получить массивы вместо объектов, используйте ARRAY_A
в get_results
(PHP> = 5.5.0 необходим для array_column
):
$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');
$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($vbn as $key => $obj){
$value = get_object_vars($obj);
$vbn2[$value['object_id']] = array($value['term_taxonomy'],$value['term_order']);
}
ИЛИ ЖЕ
foreach($vbn as $obj) {
$result[$obj->object_id] = array($obj->term_taxonomy,$obj->term_order);
}
foreach($vbn2 as $key => $value){
echo "$key => $value[0], $value[1]\n";
}
2135 => 242, 0
3245 => 242, 0
5623 => 714, 0
var_export($vbn2);
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,
),
Результаты такие же, как указано выше.
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,
)),
)
ИЛИ ЖЕ
если ты не против потратить память
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,
)),
)