Как обеспечить индексацию любого массива в Stack Overflow

Я пытаюсь сравнить два массива, используя функцию пересечения 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
)

Результирующий массив не имеет своей собственной индексации. Можно ли обеспечить индексацию?

1

Решение

Можно обеспечить индексацию, но вам нужно будет указать, какую индексацию вы хотите.

Если полученная индексация не соответствует ожидаемой, обратите внимание, что 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() требует, чтобы длина обоих массивов была одинаковой. Я не могу предоставить более подробную информацию, если вы не обновите свой вопрос, но я надеюсь, что это поможет 🙂

1

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

Других решений пока нет …