PHP - проверка многомерного массива на дубликаты (без array_unique)

ОБНОВИТЬ

I found an answer to this question for myself and I posted it, but i can only accept it in two days..


Я создаю этот многомерный массив:

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '05.03.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

Массив не должен содержать повторяющихся значений OrderDate от каждого ClientNumber.

Я хочу, чтобы результат выглядел так:

array (
  0 => 
  array (
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '05.03.2018',
    'ClientNumber' => 5500
  )
)

array (
  0 => 
  array (
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
)

Какое условие if я должен использовать, чтобы мой вывод выглядел так? Любая помощь будет оценена, спасибо!

Это моя функция, которая вызывается в foreach. Я изо всех сил старался проверить с помощью in_array и array_column, но результат не был похож на код выше.

$array = array();
function createArray($clientNr, $orderDate){
 if (empty($array)){ // if array is empty, just add
  $array[] = array(
              "OrderDate"=>$orderDate,
              "ClientNumber"=>$clientNr
                 );
 } else {
    if (??????)<--------------------------- // check here if date from clientnumber exists
      $array[] = array(
                   "OrderDate"=>$orderDate,
                   "ClientNumber"=>$clientNr
                  );
    }
 }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
142
3

Ответы 3

Вы можете попробовать это: -

$data=array();

$data[0]['OrderDate']='02.11.2018';
$data[0]['ClientNumber']='5500';

$data[1]['OrderDate']='02.11.2018';
$data[1]['ClientNumber']='5500';

$new_arr = array_unique($data, SORT_REGULAR);

Но и у других clientNumber может быть такая же OrderDate.

Syno 20.07.2018 09:01

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

ashish kumar 20.07.2018 09:03

@ashishkumar Объясните свой ответ. Будет полезно OP

Yash Parekh 20.07.2018 09:07

yash sir, если запустить приведенный выше пример, вы можете получить только одно значение в массиве. но если вы измените дату заказа или номер клиента, вы можете получить две записи

ashish kumar 20.07.2018 09:08

У меня не сработало: /

Syno 20.07.2018 09:31

это беспокоит меня. пожалуйста, поделитесь своим кодом

ashish kumar 20.07.2018 10:33

Попробуйте, как показано ниже, вы можете использовать функцию array_map или array_unique ()

$array = array(
  array(
     'OrderDate' => '02.11.2018',
     'ClientNumber' => 5500
  ),
  array(
    'OrderDate' => '02.11.2018',
    'ClientNumber' => 5500
  ),
  array(
    'OrderDate' => '05.03.2018',
    'ClientNumber' => 5500
  ),
  array(
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  ),
  array(
    'OrderDate' => '10.12.2018',
    'ClientNumber' => 2200
  )
);

$newArr = array_map("unserialize", array_unique(array_map("serialize", $array)));

print_r($newArr);

$newArr1 = array_unique($array, SORT_REGULAR);

print_r($newArr1);

У меня не сработало: /

Syno 20.07.2018 09:31

Я сделал это! Спасибо за ваши подходы, но эти двое у меня не сработали:

array_unique($array, SORT_REGULAR);
array_map("unserialize", array_unique(array_map("serialize", $array)));

Это мое решение, я добавил уникальный ключ и проверил, существует ли он уже.

$id = date("Ymd", strtotime($orderDate)).$clientNr; // creates unique key

if (!array_key_exists($id, $array)){ // check if this key exists and add if not

 $array[$id] = array(
              "OrderDate"=>$orderDate,
              "ClientNumber"=>$clientNr
             );
}

Другие вопросы по теме