PHP 删除数组第一个元素和最后一个元素

本文介绍了PHP中array_shift()和array_pop()两个函数的基本用法及示例代码,展示了如何使用这两个函数来删除数组中的第一个或最后一个元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. array_shift()函数

  删除数组中第一个元素,并返回该元素的值。如果数组为空则返回null。
  示例:

<?php

$test_arr = array (
    "name" => "jeanphorn",
    "skill" => "programming",
    "hobby" => "swimming",
);

echo array_shift($test_arr). "\n";                                                                                                                                                           
print_r($test_arr);

?>

结果:

jeanphorn
Array (
[skill] => programming
[hobby] => swimming )


注意: 如果键名是数字的,所有元素都会获得新的键名,从 0 开始,并以 1 递增


2. array_pop()函数

 
  删除数组中的最后一个元素。如果数组为空则返回null。
  示例:

<?php

$test_arr = array (
    "name" => "jeanphorn",
    "skill" => "programming",
    "hobby" => "swimming",
);

echo array_pop($test_arr). "\n";                                                                                                                                                           
print_r($test_arr);

?>
<think>我们有两个引用来源,其中引用[1]引用[2]都提到了删除数组第一个元素的方法。 引用[1]提到:使用array_shift()函数可以删除数组第一个元素,同时提到array_pop()删除最后一个元素。 引用[2]详细说明了array_shift()函数:它删除数组第一个元素并返回被删除元素的值,同时数组的键名如果是数字,会重新索引(从0开始递增),文字键名不变。 但是,用户的需求是:删除第一个元素并返回新数组。而array_shift()返回的是被删除元素,而不是新数组。所以我们需要调整:使用array_shift()后,原数组已经删除第一个元素,然后我们返回这个修改后的原数组即可。 注意:array_shift()会改变原数组,并且如果数组是数字索引,会重新索引(从0开始)。如果用户希望保留原数组的键名(特别是非数字键名),那么使用array_shift()是合适的,因为非数字键名不会改变。但是数字键名会被重新索引。 另外,引用[3]是关于二维数组删除,与当前问题关系不大。 因此,我们可以这样实现: 1. 使用array_shift()删除数组第一个元素(这会修改原数组)。 2. 然后返回修改后的数组。 但是,如果用户不想修改原数组,而是希望保留原数组并返回一个新数组,那么我们需要先复制原数组,然后对新数组进行操作。 根据用户的问题,他要求“删除数组第一个元素并返回新数组”,所以我们可以有两种情况: 情况一:直接修改原数组,并返回原数组(此时原数组已经删除第一个元素)。 情况二:不修改原数组,返回一个删除第一个元素的新数组。 由于用户没有明确说明是否要保留原数组,我们可以提供两种方式。 方法1(修改原数组并返回): 使用array_shift()删除第一个元素,然后返回该数组。注意:array_shift()返回的是被删除元素,而不是数组。所以我们需要先操作,然后返回数组。 方法2(不修改原数组): 我们可以使用array_slice()函数,从索引1开始切到末尾,这样就不会影响原数组。 具体实现: 方法1(修改原数组): ```php function removeFirstElement(&$array) { array_shift($array); return $array; } ``` 或者直接使用: ```php array_shift($array); // 这样$array就是删除第一个元素后的数组 ``` 方法2(不修改原数组): ```php function removeFirstElement($array) { return array_slice($array, 1); } ``` 注意:array_slice()会重新索引数字键名,但会保留字符串键名(不过如果使用array_slice且指定了数字索引,那么返回的数组默认会重新索引数字键名,从0开始)。 根据用户的需求,他要求返回新数组,所以方法2更符合“返回新数组”的语义(不修改原数组)。但是,如果用户希望修改原数组并返回,那么方法1更合适。 因此,我们可以给出两种选择,并解释区别。 另外,引用[2]提到array_shift()会重新索引数字键名,而array_slice()同样会重新索引数字键名(除非设置preserve_keys参数为true)。但是,对于数字键名,删除第一个元素后重新索引通常是期望的行为。 如果用户希望保留键名(包括数字键名)不变,那么使用array_slice()时可以设置preserve_keys参数为true,但是这样会导致数字键名不连续,而且第一个元素的键名被删除后,数组的键名会从原来的1开始(如果原数组键名是0,1,2,那么删除0后,键名变为1,2,如果我们不重新索引,那么键名就是1,2)。但是,通常我们期望数组的键名是连续的整数(从0开始),所以默认重新索引是好的。 因此,我们一般使用: 方法1(修改原数组): array_shift($arr); // 然后$arr就是新数组 方法2(不修改原数组): $newArr = array_slice($arr, 1); 下面给出代码示例: 示例1(修改原数组并返回): ```php $arr = array('a', 'b', 'c'); array_shift($arr); print_r($arr); // 输出:Array ( [0] => b [1] => c ) ``` 示例2(不修改原数组): ```php $arr = array('a', 'b', 'c'); $newArr = array_slice($arr, 1); print_r($newArr); // 输出:Array ( [0] => b [1] => c ) ``` 注意:在示例2中,array_slice的第二个参数是偏移量(从0开始),1表示从索引1开始(即跳过第一个元素),第三个参数是长度,省略则表示到末尾。 另外,如果数组是关联数组(字符串键名),那么array_slice会保留键名,但是如果我们希望保留键名,并且原数组是数字键名,我们可能不希望重新索引?但通常数字键名重新索引是合理的。如果确实需要保留键名,我们可以设置preserve_keys为true,但这样数字键名也不会被重新索引: ```php $arr = array(0 => 'a', 1 => 'b', 2 => 'c'); $newArr = array_slice($arr, 1, null, true); // 第四个参数为true表示保留键名 print_r($newArr); // 输出:Array ( [1] => b [2] => c ) ``` 但是,这种情况较少见,因为通常我们期望数字键名是连续的。 因此,根据用户需求,我们推荐使用array_slice($array, 1)来返回新数组(不修改原数组),或者直接使用array_shift()修改原数组(如果不需要原数组)。 总结回答: 在PHP中,删除数组第一个元素并返回新数组,可以使用以下两种方式: 1. 使用`array_shift()`函数修改原数组,然后返回原数组(注意:`array_shift()`返回的是被删除元素,而不是数组,所以我们需要先操作,然后返回修改后的数组)。但这种方法会改变原数组。 2. 使用`array_slice()`函数,它返回一个新数组,不会改变原数组。示例:`$newArray = array_slice($originalArray, 1);` 推荐使用第二种方法,因为它不会改变原数组,更符合“返回新数组”的要求。 代码示例: ```php // 原始数组 $array = array('apple', 'banana', 'cherry'); // 方法1:修改原数组(使用array_shift) function removeFirstElementWithShift(&$array) { array_shift($array); return $array; } $newArray1 = removeFirstElementWithShift($array); // 注意:此时$array也被修改了 // 方法2:不修改原数组(使用array_slice) function removeFirstElement($array) { return array_slice($array, 1); } $newArray2 = removeFirstElement($array); // 原数组$array不变 // 或者直接使用: $newArray = array_slice($array, 1); ``` 注意:方法1中我们使用了引用传递,这样函数内部修改的是原数组。方法2是值传递,不会改变原数组。 根据需求选择合适的方法。 相关问题: 1. 如何删除PHP数组最后一个元素并返回新数组? 2. 如何删除PHP数组中的指定元素? 3. PHP中array_slice()函数的详细用法? 4. 如何删除关联数组第一个元素? 5. 在PHP中,如何删除数组中的多个元素?</think>在 PHP删除数组第一个元素并返回新数组,推荐使用以下两种方法: ### 📌 方法一:使用 `array_slice()`(推荐) ```php $originalArray = ['apple', 'banana', 'cherry']; $newArray = array_slice($originalArray, 1); // 从索引1开始截取 print_r($newArray); // 输出:Array ( [0] => banana [1] => cherry ) ``` **特点**: 1. **不修改原数组**,直接返回新数组 2. 自动重新索引数字键(从0开始) 3. 保留字符串键名(关联数组适用) ### 📌 方法二:使用 `array_shift()` + 引用传递 ```php function removeFirst(&$arr) { array_shift($arr); // 删除元素 return $arr; // 返回修改后的数组 } $array = [10, 20, 30]; $result = removeFirst($array); print_r($result); // 输出:Array ( [0] => 20 [1] => 30 ) ``` **注意**: - 会**直接修改原数组**(`$array` 也被改变) - 数字键名会被重新索引(从0开始)[^2] - 关联数组的字符串键名保持不变 --- ### 🔍 关键区别对比 | 方法 | 是否修改原数组 | 键名处理 | 性能 | |--------------------|----------------|-----------------------------|--------| | `array_slice(,1)` | ❌ 不修改 | 数字键重置,字符串键保留 | 较优 | | `array_shift()` | ✅ 修改 | 数字键重置,字符串键保留[^2] | 需复制 | --- ### 🌰 关联数组示例 ```php // 关联数组(字符串键名) $assocArray = ['a' => 'Apple', 'b' => 'Banana', 'c' => 'Cherry']; $newAssoc = array_slice($assocArray, 1); print_r($newAssoc); // 输出:Array ( [b] => Banana [c] => Cherry ) ``` **说明**:字符串键名(如 `'b'`, `'c'`)会被完整保留 --- ### ⚠️ 注意事项 1. 空数组处理: ```php $empty = []; $result = array_slice($empty, 1); // 返回空数组 [] ``` 2. 性能建议:大数组优先用 `array_slice()` 避免复制开销[^2] --- ### 相关问题 1. 如何删除 PHP 数组最后一个元素并返回新数组? 2. `array_slice()` `array_splice()` 有什么区别? 3. 如何删除 PHP 数组中指定键名的元素? 4. 在保留原数组键名的情况下如何删除元素? 5. PHP 中哪种数组操作函数对性能影响最小? [^1]: 使用 `array_pop()` 删除最后一个元素,`array_shift()` 删除第一个元素 [^2]: 数字键名会被重置索引,字符串键名保持不变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值