2017-02-22 6 views
0

У меня есть массив, как показано ниже. Мне нужно сравнивать друг с другом и возвращать соответствующий массив по первому индексу, а затем другому.Сравните многомерный массив друг с другом и некоторое поле массива с внешней переменной

Как мы можем сравнивать весь массив друг с другом на основе id и scid с помощью $ scid?

$scid = 307; 
$array = array(
    0 => 
     array(
      'id' => '485', 
      'scid' => 306 
     ), 
    1 => 
     array(
      'id' => '484', 
      'scid' => null 
     ), 
    2 => 
     array(
      'id' => '486', 
      'scid' => 305 
     ), 
    3 => 
     array(
      'id' => '485', 
      'scid' => 307 
     ), 
    4 => 
     array(
      'id' => '485', 
      'scid' => 309 
     ), 
    5 => 
     array(
      'id' => '485', 
      'scid' => 329 
     ), 
); 

Массив результат должен быть как

array(3) { 
      [485]=> array(2) { ["id"]=> string(3) "485" ["scid"]=> int(307) } 
      [484]=> array(2) { ["id"]=> string(3) "484" ["scid"]=> NULL } 
      [486]=> array(2) { ["id"]=> string(3) "486" ["scid"]=> int(305) } 
     } 

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

+0

Хорошо, что вы сделали весь анализ. Теперь вам просто нужно что-то закодировать. – RiggsFolly

+0

* duplicate id, на котором scid не подходит, мы можем выбрать любое значение id * - мы можем захватить первое значение, верно? например, '[485] => array (2) {[" id "] => string (3)" 485 "[" scid "] => int (306)' (первый amoung '485') – RomanPerekhrest

+0

В приведенном выше сценарии 485 имеет соответствие 307, поэтому он должен возвращать [485] => array (2) {["id"] => string (3) "485" ["scid"] => int (307). Если у него нет такого соответствия, то он может выбрать любой из них с идентификатором 485. Также тот, у кого соответствующий scid, всегда должен быть в первом индексе. – Yogs

ответ

0

Попробуйте это,

$temp = []; 
    foreach($array as $k => $v){ 
     $temp[$v['id']][] = $v; 
    } 

Дайте ему попробовать, это будет работать.

0

Вы хотите что-то вроде этого?

$result = []; 
foreach ($array as $item) { 
    $result[$item['id']] = ['id' => $item['id'], 'scid' => $item['scid']]; 
} 
var_dump($result); 
+0

Не совсем,, у него нет никакого сравнения с $ scid. Он просто удалит дубликат, но не будет иметь массив с соответствующим $ scid. – Yogs

+0

У меня есть решение для сравнения значений, но я не знаю, как всегда поддерживать соответствующий подмассива. $ scid = 307; $ result = []; \t for ($ i = 0; $ i Yogs

Смежные вопросы