Сравнение значений массива

andrei24

Новичок
Всем привет. Есть массив вида:
PHP:
array:3 [
  0 => array:16 [
    "class_id" => 1
    "group_id" => 2
    "use" => 1
  ]
  1 => array:16 [
    "class_id" => 1
    "group_id" => 3
    "use" => 1
  ]
  2 => array:16 [
    "class_id" => 2
    "group_id" => 1
    "use" => 1
  ]
]
Нужно:
1)Если в массиве совпадают class_id и use = 1, то значения с равными class_id удалить, а оставить лишь одно, то есть должно быть:
PHP:
array:3 [
  0 => array:16 [
    "class_id" => 1
    "group_id" => 2
    "use" => 1
  ]
  1 => array:16 [
    "class_id" => 2
    "group_id" => 1
    "use" => 1
  ]
]
2) Если в массиве есть значения у которых class_id одинаковые, а use не равны, то вывести оставшиеся значения. Пример :

Был:
PHP:
array:3 [
  0 => array:16 [
    "class_id" => 1
    "group_id" => 2
    "use" => 0
  ]
  1 => array:16 [
    "class_id" => 1
    "group_id" => 3
    "use" => 1
  ]
  2 => array:16 [
    "class_id" => 2
    "group_id" => 1
    "use" => 1
  ]
]
Стал:
PHP:
array:3 [
  0 => array:16 [
    "class_id" => 2
    "group_id" => 1
    "use" => 1
  ]
]
 

ksnk

прохожий
Читать про array_walk. Думать. Писать.
Что из этого сделано? Что не получилось?
 

andrei24

Новичок
Читать про array_walk. Думать. Писать.
Что из этого сделано? Что не получилось?
Наброски такие :
PHP:
        for($i = 0; $i < count($value); $i++){
          // if (isset($value[$i]['use'])) continue;
            $k = 1;

            for($j = $i + 1; $j < count($value); $j++){
                if($value[$i]['class_id'] == $value[$j]['class_id']) $k++;
            }
                $array = array();
                for ($z = $i; $z < count($value); $z++)
                {
                    if($value[$i]['class_id'] == $value[$z]['class_id'] && $value[$i]['use'] == 1) {
                        $array[] = $value[$z];
                        //$value[$z]['use'] = 1;
                    }
                   // elseif($value[$i]['class_id'] == $value[$z]['class_id'] && $value[$i]['use'] != $value[$z]['use']){
                   //     $array[] = $value[$z];
                   //}

                }
                $var[] = $array;
        }

        var_dump($var);
Желательно помочь, я новичок в работе с массивами
 

ksnk

прохожий
Чтобы убрать первый из вложенных циклов - можно просто собирать все class_id в отдельный массив.. Впоследствии, функцией in_array проверять, встречался ли он уже или нет.

Второй цикл нужно заменить условием(ями). Если у нас `use` равно 1, и неуникальный (in_array) `class_id`, то нам не нужен этот элемент, иначе - нужен.
 

andrei24

Новичок
Чтобы убрать первый из вложенных циклов - можно просто собирать все class_id в отдельный массив.. Впоследствии, функцией in_array проверять, встречался ли он уже или нет.

Второй цикл нужно заменить условием(ями). Если у нас `use` равно 1, и неуникальный (in_array) `class_id`, то нам не нужен этот элемент, иначе - нужен.
Собственно вся проблема как удалить не нужный элемент и оставить нужный
 

ksnk

прохожий
В твоем коде, последняя строка цикла собирает нужный элемент в новый массив. Это оно и есть.
 

andrei24

Новичок
В твоем коде, последняя строка цикла собирает нужный элемент в новый массив. Это оно и есть.
Но выводит не то:
PHP:
array:3 [
  0 => array:2 [
    0 => array:16 [
      "class_id" => 1
      "group_id" => 1
      "use" => 1
    ]
    1 => array:16 [
      "class_id" => 1
      "group_id" => 3
      "use" => 1
    ]
  ]
  1 => array:1 [
    0 => array:16 [
      "class_id" => 1
      "group_id" => 3
      "use" => 1
    ]
  ]
  2 => array:1 [
    0 => array:16 [
      "class_id" => 2
      "group_id" => 2
      "use" => 1
    ]
  ]
]
 

ksnk

прохожий
Но выводит не то:
Какой код выводит. Опубликованный ранее или измененный ?
Чтобы убрать первый из вложенных циклов - можно просто собирать все class_id в отдельный массив.. Впоследствии, функцией in_array проверять, встречался ли он уже или нет.

Второй цикл нужно заменить условием(ями). Если у нас `use` равно 1, и неуникальный (in_array) `class_id`, то нам не нужен этот элемент, иначе - нужен.
?
 

andrei24

Новичок
Какой код выводит. Опубликованный ранее или измененный ?
?
Ответ выше это результат этого кода:
PHP:
        for($i = 0; $i < count($value); $i++){
          // if (isset($value[$i]['use'])) continue;
            $array = array();
            for ($z = $i; $z < count($value); $z++)
            {
                if($value[$i]['class_id'] == $value[$z]['class_id'] && $value[$i]['use'] == 1) {
                    $array[] = $value[$z];
                    //$array[] = array_walk_recursive($value[$z], array('App\Http\Controllers\Admin\GroupController', 'arrayWalk')); //$value[$z];

                    //$value[$z]['use'] = 1;
                }
//                elseif($value[$i]['class_id'] == $value[$z]['class_id'] && $value[$i]['use'] != $value[$z]['use']){
//                    $array[] = $value[$z];
//                }

            }
            $var[] = $array;
        }
 
Сверху