Я пытаюсь сравнить два массива, используя функцию пересечения PHP.
Я использую следующий код
$input_array=array();
$input_array=explode("," , $_POST['list']);
$array = array();
$result1 =mysql_query("SELECT b_no FROM abc");
while($fetch_array=mysql_fetch_array($result1)){
$array[] = $fetch_array['b_no'];
}
$result=array_intersect($input_array,$array);
echo"<pre>";
print_r($result);
echo"</pre>";
и результат таков:
Array
(
[4] => 443829
[5] => 952040
)
Результирующий массив не имеет своей собственной индексации. Можно ли обеспечить индексацию?
Можно обеспечить индексацию, но вам нужно будет указать, какую индексацию вы хотите.
Если полученная индексация не соответствует ожидаемой, обратите внимание, что array_intersect()
сравнивает только значения каждого массива и сохраняет индекс или ключ из первого массива каждого совпадения.
Если ваше требование также состоит в том, чтобы соответствовать ключам ассоциативного массива (хотя я предполагаю, что вы не судите по вашему примеру), вы можете использовать array_intersect_assoc()
.
Если вы хотите просто «сбросить» индексирование, вы можете использовать array_values()
. Например:
<?php
$a = [2 => 1, 2, 3];
$b = [2, 3, 4];
$intersect = array_intersect($a, $b);
print_r($intersect);
// Original keys are retained:
//
// Array
// (
// [3] => 2
// [4] => 3
// )
print_r(array_values($intersect));
// Original keys are discarded:
//
// Array
// (
// [0] => 2
// [1] => 3
// )
С другой стороны, если у вас был определенный набор ключей, которые вы хотели бы использовать, скажем, например, ['foo', 'bar']
ты можешь использовать array_combine()
— он принимает два массива, один как ключи, а другой как значения, чтобы явно определить новый набор индексов или ключей для массива. Например:
$keys = ['foo', 'bar'];
print_r(array_combine($keys, $intersect);
// Array
// (
// [foo] => 2
// [bar] => 3
// )
$indexes = [100, 200];
print_r(array_combine($indexes, $intersect));
// Array
// (
// [100] => 2
// [200] => 3
// )
Пожалуйста, обратите внимание, array_combine()
требует, чтобы длина обоих массивов была одинаковой. Я не могу предоставить более подробную информацию, если вы не обновите свой вопрос, но я надеюсь, что это поможет 🙂
Других решений пока нет …