Фильтрация масива

fenix-77

Новичок
Помогите пожалуйста. Есть массив

Код:
Array(
    [0] => Array
        (
            [name] => name1
            [id] => 0
        )

    [1] => Array
        (
            [name] => name1
            [id] => 0
        )

    [2] => Array
        (
            [name] => name1
            [id] => 1
        )
    [3] => Array
        (
            [name] => name2
            [id] => 0
        )
...
)
Нужно выбросить с массива подмассив [1] и так далее, то есть все подмассивы значения в которых [x]name = [y]name, [x]id = [y]id. Время позднее (или точнее уже ранее) так что в голову что то ничего не лезет. Помогите пожалуйста.
 

DIG

Новичок
Партнер клуба
Можно просто в цикле перебирать массив и записывать в новый массив те значения, которые удовлетворяют условию.
 

fenix-77

Новичок
Пока что в голову пришло только такое:
Код:
    foreach ($existing_categories as $v1){
        $k = 0;
        foreach ($existing_categories as $v2){
            if ($v1['name'] == $v2['name']){
                if ($v1['store_id'] != $v2['store_id']){
                    $k = 1;
                    break;
                }   
            }
        }
        if ($k == 0) {
            $unique_existing_categories[] = $v1;
        }   
    }
Но так удаляются два значения а мне нужно чтобы удалился только дубль.
 

fenix-77

Новичок
Да большое вам спасибо, я думал это из за ARRAY_FILTER_USE_BOTH не работает, а это просто я ошибку в другом месте сделал. Подскажите еще при выполнении вылазит Warning: in_array() expects parameter 2 to be array, null given. Я это убрал так @in_array() так делать верно или нет?
 

fixxxer

К.О.
Партнер клуба
Правильно - найти ошибку в твоем коде, из-за которой у тебя откуда-то там null.
 

fenix-77

Новичок
Всем спасибо, мне подсказали более подходящее решения :
Код:
$a = Array(
    0 => Array('name' => 'name1','id' => 0),
    1 => Array('name' => 'name1','id' => 0),
    2 => Array('name' => 'name1','id' => 1),
    3 => Array('name' => 'name2','id' => 0),
);
$unique = array_map('unserialize', array_unique(array_map('serialize', $a)));
print_r($unique);
 

AnrDaemon

Продвинутый новичок
А оно точно более подходящее?… А ты понял, что оно делает?…
 

fenix-77

Новичок
А может кто поткажет как сделать если есть
Код:
Array(
    [0] => Array
        (
            [name] => name1
            [id] => 0
            [some] => some1
        )

    [1] => Array
        (
            [name] => name1
            [id] => 0
            [some] => some2
        )

    [2] => Array
        (
            [name] => name1
            [id] => 1
            [some] => some3
        )
    [3] => Array
        (
            [name] => name2
            [id] => 0
            [some] => some4
        )
...
)
и нужно выбросить с массива подмассив [1] и так далее, то есть все подмассивы значения в которых [x]name = [y]name, [x]id = [y]id, а [x]some = [y]some не проверялось?
 

AnrDaemon

Продвинутый новичок
Дайте, я угадаю… Эти массивы вы получаете из БД?…
 

fenix-77

Новичок
Да ... А что есть какая то функция что бы отфильтровать это в запросе? Мой запрос был таким
Код:
SELECT c.name, cs.store_id, c.category_id FROM category c, category_store cs WHERE c.category_id=cs.category_id
 
Последнее редактирование:
Сверху