Получить пересечение таблиц
У меня вопрос. Итак, у меня есть этот массив:
$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, но не работает. Не могли бы вы мне помочь?
4 ответа
Просто используйте петли:
$a_response = array();
foreach ($a_users as $array) {
if (in_array($array['id'], $a_list_id)) {
$a_response []= $a_users;
}
}
Аргумент 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, а другое - пустым массивом, но это не очень полезно
Вы пытались использовать 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"));
Попробуйте приведенный ниже код с помощью функции 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);