Я хочу удалить элементы из массива с помощью PHP и увидел, что это довольно легко с array_splice
или же unset
,
Я хотел бы использовать это внутри другой функции, которая принимает этот массив с элементами для удаления в качестве параметров. Однако у функции есть другое возвращаемое значение, и массив должен быть обновлен как побочный эффект (array_splice
или же unset
оба работают по побочному эффекту). Мой код выглядит следующим образом:
<?php
function removeSomeElements($arr)
{
for ($i = 0; $i<count($arr); $i++) {
$c = $arr[$i];
if ($c > 2) {
echo "Element $c found at $i\n";
unset($arr[$i]);
}
}
print_r($arr); // misses middle element
return true;
}
$t = [0, 3, 1];
print_r($t); // original array
$success = removeSomeElements($t);
print_r($t); // should be missing middle element, but everything is here
У меня такие же проблемы с array_splice
то есть когда я заменяю вызов на unset
со следующим:
array_splice($arr, $i, 1);
$i--;
Параметр функции хорошо обновляется внутри функции, но не снаружи. Я что-то пропустил?
Замечания: Я могу найти обходной путь для этого довольно легко, я просто хотел знать, возможно ли это и почему / почему нет. Заранее спасибо!
Вам нужно пройти массив от ссылка &
,
Попробуйте это так:
Заменить эту строку:
function removeSomeElements($arr)
С этой строкой:
function removeSomeElements(&$arr)
Альтернативный метод — вернуть измененный массив в функцию, а затем установить $t
переменная вот так:
<?php
function removeSomeElements($arr)
{
for ($i = 0; $i<count($arr); $i++) {
$c = $arr[$i];
if ($c > 2) {
echo "Element $c found at $i\n";
unset($arr[$i]);
}
}
print_r($arr); // misses middle element
return $arr; // <-- return the altered array
}
$t = [0, 3, 1];
print_r($t); // original array
$t = removeSomeElements($t); // <-- set the variable
print_r($t);
Возвращает:
Array
(
[0] => 0
[1] => 3
[2] => 1
)
Element 3 found at 1
Array
(
[0] => 0
[2] => 1
)
Array
(
[0] => 0
[2] => 1
)