Получить пересечение таблиц

У меня вопрос. Итак, у меня есть этот массив:

$a_list_id = array(
0 => 1234
1 => 739
3 => 538
);

И этот массив:

$a_users = array(
0 => array(
id => 15627,
name => test
),
1 => array(
id => 1234,
name => test1
),
2 => array(
id => 739,
name => test2
)
)

Результат должен быть:

$a_response = array(
0 => array(
id => 1234,
name => test1
)
)

Потому что идентификатор 1234 находится в обоих массивах.
Я пытаюсь с array_intersect, но не работает. Не могли бы вы мне помочь ?

0

Решение

Просто используйте петли:

$a_response = array();
foreach ($a_users as $array) {
if (in_array($array['id'], $a_list_id)) {
$a_response []= $a_users;
}
}
1

Другие решения

Аргумент array_intersect будет давать полезные результаты только в том случае, если значения обоих массивов можно привести к одному и тому же типу. У вас есть массив целых чисел и другой массив массивов, они никогда не могут * совпадать, поэтому пересечение всегда будет пустым

Если вы хотите пересечение массивов, то у вас есть два варианта:

  • Индексируйте массивы так, чтобы их ключи были значениями, которые вы хотите пересечь и использовать array_intersect_key
  • Реализуйте свою собственную логику сравнения массивов с array_uintersect и функция обратного вызова, которая знает структуру сравниваемых массивов

пример первого:

$a_list_id = array(
1234 => 1234
739 => 739
538 => 538
);

$a_users = array(
15627 => array(
id => 15627,
name => test
),
1234 => array(
id => 1234,
name => test1
),
739 => array(
id => 739,
name => test2
)
)

var_dump (array_intersect_key ($a_users, $a_list_id));

Пример последнего:

var_dump (array_uintersect ($a_users, $a_list_id, function ($user, $id) {
return $user ["id"] - $id; // Result should be 0 if they match, as per documentation
}))

* Их можно считать одинаковыми в случае, когда одно значение — целое число 0, а другое — пустой массив, но это не очень полезно

1

Попробуйте приведенный ниже код с помощью функции array_search ():

$a_list_id = array(1234, 538,739);

$a_users = array(
array(
'id'=> 15627,
'name' => 'test'
),
array(
'id' => 1234,
'name' => 'test1'
),
array(
'id' => 739,
'name' => 'test2'
)
);

foreach($a_users as $a_user){
if (in_array($a_user['id'], $a_list_id)) {
$a_response[array_search($a_user['id'], $a_list_id)] = $a_user;
}
}

print_r($a_response);
0

Вы пытались использовать array_intersect_uassoc? http://php.net/manual/en/function.array-intersect-uassoc.php

function compare_ids($a, $b)
{
return $a - $b['id'];
}

print_r(array_intersect_uassoc($a_list_id, $a_users, "compare_ids"));
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector