PHP: сравнить два массива и отсортировать по приоритету - PullRequest
0 голосов
/ 13 января 2011

Я бы хотел сравнить два массива: один содержит список возможных опций, а другой - приоритеты.

Вот как организованы два массива:

foreach ($varsA as $varA) {
  foreach ($varsB as $varB) {
      $options[$varA][$varB] = $id;
      $priority[$varA] = $priority + $priority[$varA];
    }
}

это то, что содержит $ options:

array (
  1 => 
  array (
    33307 => 'w',
    33313 => '7',
  ),
  2 => 
  array (
    33307 => 'w',
    33313 => '7',
  ),
  3 => 
  array (
    33307 => 'w',
    33313 => '7',
  ),
  4 => 
  array (
    33307 => '4',
    33313 => '7',
  ),
)

и вот что содержит $ priority:

array (
  1 => 5,
  2 => 9,
  3 => 9,
  4 => 5,
)

Я хотел бы продублировать значения дубликатов из $ options и оставить значение с уникальными значениями с самым низким приоритетом:

Вывод будет: Array (1, 4) Поскольку 1, 2, 3 не уникальны, а 1 имеет наименьший приоритет.

Я использовал следующую функцию для удаления дубликатов, но я не знаю, как ее адаптировать для работы с приоритетами:

super_magic($options) {
    $result = array_map("unserialize", array_unique(array_map("serialize", $options)));
    foreach ($result as $key => $value) {
      if ( is_array($value) ) {
        $result[$key] = super_magic($value);
      }
    }
    return $result;
  }

Ответы [ 2 ]

0 голосов
/ 14 января 2011
    for ($x = 1; $x <= count($options); $x++) {
  for ($i = 1; $i <= count($options); $i++) {
    if (array_key_exists($x, $options) && array_key_exists($i, $options)) {
      if ($x != $i) {
        $diff = array_diff($options[$x], $options[$i]);
        if(empty($diff)) {
          if ($priority[$x] >= $priority[$i]){
            unset($options[$x]);
          }
        }
      }
    }
  }
}
0 голосов
/ 13 января 2011

Это звучит как очень специализированный сценарий без основы, специфичной для PHP. С учетом вышесказанного, я загляну на http://php.net/manual/en/ref.array.php эту страницу, чтобы узнать о функциях PHP, имеющихся в вашем распоряжении для использования массивов PHP. Я хотел бы посмотреть на такие функции, как uksort () и uasort ()

...