Сбросить индексы массива из значения другого массива?

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