Де дублирующий многомерный массив

У меня довольно простой многомерный массив, который мне нужен для дедуплирования. Мне также нужно удалить любой ключ, который имеет значение, поэтому в приведенном ниже коде мне нужно будет сохранить вторую цель/значение city/Paris (Array 3), а также удалить 6-й массив.

Array
(
    [0] => Array
        (
            [target] => city
            [value] => London
        )

    [1] => Array
        (
            [target] => colour
            [value] => Red
        )

    [3] => Array
        (
            [target] => city
            [value] => Paris
        )

    [4] => Array
        (
            [target] => type
            [value] => House
        )

    [6] => Array
        (
            [target] => name
            [value] => 
        )

    [7] => Array
        (
            [target] => email
            [value] => [email protected]
        )

    [9] => Array
        (
            [target] => custom2
            [value] => path/to/something
        )

)

Я могу это сделать:

  • Сглаживание массива
  • Назначение цели/значения как нового ключа/значений (это автоматически перезаписывает более позднее значение, если есть дубликаты)
  • Удалите все ключи, которые имеют значение
  • Восстановить массив

Это кажется неправильным, и я уверен, что есть лучшее решение, использующее array_walk_recursive (), поскольку это, вероятно, сохранит исходные ключи и сделает более элегантное решение.

Это мой текущий код:

function _clean_and_dedupe_targeting($array) {
 //First flatten the array.
  $flattenned = array();
  foreach ($array as $item) {
    foreach ($item as $value) {
      $flattenned[] = $value;
    }
  }

 //Take alternate items as key/value pairs.
 //THIS WILL OVERWRITE ANY DUPLICATES LEAVING THE ONE SET IN CONTEXT IN PLACE.
  $keyval = array();
  array_unshift($flatenned, false);
  while (false !== $key = next($flattenned)) {
    $keyval[$key] = next($flattenned);
  }

 //Remove any items with 
  $remove_string = '';
  $remove_keys = array_keys($keyval, $remove_string);

 //Remove any keys that were found.
  foreach ($remove_keys as $key) {
    unset($keyval[$key]);
  }

 //Rebuild the array as a multidimensional array to send to the js.
  $targeting = array();
  $i = 0;
  foreach ($keyval as $target => $value) {
    $targeting[$i] = array('target' => $target, 'value' => $value);
    $i++;
  }

  return $targeting;
}
1
nl ja de
возможный дубликат многомерного массива PHP удалить дубликат
добавлено автор Kuf, источник
добавлено автор Ben Carey, источник

1 ответы

Ваш алгоритм именно то, что вы бы сделали:

// flatten and remove empty values
$params = array();
foreach ($values as $value) {
    if (!empty($value['value'])) {
        $params[$value['target']] = $value['value'];
    }
}

// rebuild array
$values = array();
foreach ($params as $target => $value) {
    $values[] = array(
        'target' => $target,
        'value' => $value,
    );
}
0
добавлено
phpGeeks
phpGeeks
3 620 участник(ов)

Best PHP chat Еще: @dbGeeks - базы данных @phpGeeksJunior - новичкам @moscowProgers - IT Москва @ebanoePhp - весёлый канал о PHP @laravel_pro - Laravel @jobGeeks - вакансии @jsChat - JS Правила: https://t.me/phpGeeks/764859 ДР - 28.03.2016

PHP
PHP
1 309 участник(ов)

Группа про современный PHP. Обсуждаем ООП, TDD, BDD, DDD, SOLID, GRASP и прочие крутые базворды Для ознакомления: https://gist.github.com/mkusher/711bd46f0b62fbae851182e6fb3b1839 Группа PHP для новичков @phpGeeksJunior Вакансии: https://t.me/fordev

PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
1 251 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs

phpGeeksJunior
phpGeeksJunior
980 участник(ов)

Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Правила и полезные ссылки https://gist.github.com/exileed/a53dd0617b35a705ff44b38c8028e6a5 Бест от пхпгикс https://t.me/best_of_phpgeeks

phpclub.ru
phpclub.ru
872 участник(ов)

Официальный чат phpclub.ru - остерегайтесь подделок #rules Правила группы - уважайте друг друга. Скриншоты -> ссылками. Код -> pastebin.com. Вакансии строго -> https://goo.gl/4bNxym, в чат ссылку. За рекламу и мат - БАН!

Devall | PHP
Devall | PHP
272 участник(ов)

Пристанище для восходящих звёзд разработки, которые перейдут на более адекватные языки. http://combot.org/chat/-1001014863761 Инвайт: j.mp/devallphp