PHP - 我能从特定的键名开始移除数组元素吗?

3

我在 PHP 中遇到了一点问题。

我有以下数组:

Array
(
    [0] => banana
    [1] => apple
    [2] => raspberry
    [3] => kiwi
    [4] => cherry
    [5] => nuts
)

但我想把“kiwi”键删除,并将所有其他键向上移动,以获得以下结果...

Array
(
    [0] => banana
    [1] => apple
    [2] => raspberry
    [3] => cherry
    [4] => nuts
)

我相信这里有人知道如何做到这一点,php的shift只取第一个键而不是特定的内容。

提前感谢。

4个回答

5
这是array_splice的作用,它甚至可以让你在其中插入新条目,如果你需要的话。
对于这个特定情况,你可以使用以下方法:
array_splice($array, 3, 1);

它是否重新生成密钥? - Starx
@SverriM.Olsen,别开玩笑。 - Starx
非常感谢 :) 它可以正常工作,例如:array_splice($array , 3, 1); - Sebastian

2
据我所知,没有任何内置函数可以完成这个任务,但是你可以创建一个函数。你需要做的是删除特定的元素,然后重新计算键值。
function a_shift($index, $array) {
     unset($array[$index));
     return array_values($array);
}

嗯...array_map在这里的目的是什么? - Niet the Dark Absol
@Kolink,它将仅从值创建一个新数组,因此重置键。由于这是我的更大功能的一部分,我忘记删除嵌套数组的情况。 - Starx
不,它不会。它将遍历数组的每个元素,并返回数组的值,如果任何父数组的元素不是数组,则会抛出错误...只需使用return array_values($arra);即可。 - Niet the Dark Absol
@Kolink,我还没写完我的评论,请再读一遍。 - Starx

2
$array = array("banana", "apple", "raspberry", "kiwi", "cherry", "nuts");
$key = array_search('kiwi', $array);
unset($array[$key]);
$array = array_values($array);
print_r($array);

Output:
Array ( [0] => banana [1] => apple [2] => raspberry [3] => cherry [4] => nuts ) 

0

我使用这个方法从一个数组中删除键并复制到另一个数组:

$keys = [1, 3];
foreach ($keys as $index => $key) {
    if ($index != 0) {
        $key -= $index;
    }
    $newArr[] = array_splice($oldArr, $key, 1)[0];
}
return $newArr;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接