Сбросить индексы массива из значения другого массива?
Я хочу сбросить индексы массива, используя unset в php.
<?php
$a=array('a','b','c','d','e');
$b=array(2,3);//2,3 are indexs which I have to unset from array a.
print_r($a);
unset($a,$b);//how can I do it.
print_r($a);
?>
Я хочу вывод как: Без Итерации по $b и unset($a[$b_value]);
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )
Array ([0] => a [1] => b [4] => e )
3 ответа
Если вы ищете oneline решение, попробуйте это:
$a = array_diff_key($a, array_flip($b));
Также я написал тест производительности (источник) для этого алгоритма. Это быстрее чемforeach($b as $val) unset($a[$val]);
на 20-30%.
Обновить
Кажется, этот алгоритм имеет нелинейную зависимость производительности от объема данных:
$a
с результатом 1000 элементов:
Test name Repeats Result Performance
array_diff_key 10000 0.990571 sec +0.00%
foreach 10000 1.183903 sec -19.52%
$a
с результатом 10000 элементов:
Test name Repeats Result Performance
foreach 10000 12.924521 sec +0.00%
array_diff_key 10000 28.338741 sec -119.26%
$a
с результатом 100000 элементов:
Test name Repeats Result Performance
foreach 10000 201.961125 sec +0.00%
array_diff_key 10000 619.329440 sec -206.66%
Если $a
массив имеет более 1000 элементов, я бы предпочел foreach
алгоритм.
array_diff_key
<?php
$a=array('a','b','c','d','e');
$b=array(0,1);//0,1 are indexs which I have to unset from array a.
print_r($a);
$a = array_diff_key ($a,$b);//how can I do it.
print_r($a);
?>
$a=array('a','b','c','d','e');
$b=array(2,3);//2,3 are indexs which I have to unset from array a.
print_r($a);
$c = removeFromAnotherArray($a,$b);
print_r($c);
function removeFromAnotherArray($a,$b)
{
foreach($b as $key=>$val)
{
if(array_key_exists($key,$a))
{
unset($a[$val]);
}
}
return $a;
}
Выход будет:
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
Array
(
[0] => a
[1] => b
[4] => e
)