关于PHP数组重新索引问题

本文介绍了一种在PHP中处理数组的有效方法,特别是如何通过unset移除特定元素,并使用array_merge来重新索引数组。此外,还对比了unset与array_splice的不同之处。

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

业务需求:从淘宝抓取的图片,放到一个数组中,发现有的图片是不需要的,是gif或者是懒加载的图片。需要过滤掉

如何过滤呢,想必很多人会想到foreach 循环,然后 strpos一下找到符合规则的图片然后unset掉就可以了。可是你unset掉后,要想重新索引数组该怎么办呢  用array_merger

如:

$a=array(0=>'a',1=>'b',2=>'c',3=>"Horse",4=>"Dog");
unset($a[3]);
unset 掉第四个单元,print_r($a)   //Array ( [0] => a [1] => b [2]=> c [4] => Dog )

需要重新索引$a ,   只需要 $enda = array_merge($a); 

此时$enda 就为重新索引后的数组


此时说一下,array_splice() 跟unset的区别

unset 删除数组中的某个单元后数组不会重新索引,而array_splice则可以重新索引

### PHP数组是否具有索引 PHP数组可以具有索引,且分为两种类型:**索引数组(Index Array)**和**关联数组(Associative Array)**。索引数组使用整数作为键名,并且这些键是自动维护的[^1]。例如: ```php $indexArray = array("苹果", "香蕉", "橙子"); print_r($indexArray); ``` 输出结果为: ``` Array ( [0] => 苹果 [1] => 香蕉 [2] => 橙子 ) ``` 而关联数组则使用字符串作为键名[^1]。例如: ```php $associativeArray = array("fruit" => "苹果", "color" => "红色"); print_r($associativeArray); ``` 输出结果为: ``` Array ( [fruit] => 苹果 [color] => 红色 ) ``` ### PHP数组与JavaScript对象和数组的对比 #### 1. **PHP数组与JavaScript数组的对比** PHP中的数组既可以作为索引数组也可以作为关联数组,而JavaScript中的数组严格来说只能作为索引数组。JavaScript数组元素通过数字索引访问,且不支持直接使用字符串作为键名[^4]。例如: ```javascript const jsArray = ["苹果", "香蕉", "橙子"]; console.log(jsArray[0]); // 输出 "苹果" ``` 如果尝试在JavaScript数组中使用字符串作为键名,则该键名会被视为对象属性而非数组元素[^5]。例如: ```javascript const jsArray = []; jsArray["fruit"] = "苹果"; console.log(jsArray.fruit); // 输出 "苹果" console.log(jsArray.length); // 输出 0 ``` 可以看到,尽管`fruit`被添加到`jsArray`中,但数组长度仍为0,说明`fruit`并非数组元素。 #### 2. **PHP数组与JavaScript对象的对比** PHP中的关联数组类似于JavaScript中的对象,因为两者都允许使用字符串作为键名来存储键值对。然而,JavaScript对象更灵活,可以直接通过点号或方括号访问属性[^3]。例如: ```javascript const jsObject = { fruit: "苹果", color: "红色" }; console.log(jsObject.fruit); // 输出 "苹果" console.log(jsObject["color"]); // 输出 "红色" ``` 而在PHP中,关联数组需要通过方括号访问键值对[^1]。例如: ```php $phpArray = array("fruit" => "苹果", "color" => "红色"); echo $phpArray["fruit"]; // 输出 "苹果" ``` 此外,PHP中的对象与关联数组不同,对象需要通过类定义,并且属性和方法必须明确声明[^3]。例如: ```php class Fruit { public $name; public function __construct($name) { $this->name = $name; } } $f = new Fruit("苹果"); echo $f->name; // 输出 "苹果" ``` #### 3. **JSON格式的使用** PHP和JavaScript都可以使用JSON格式进行数据交换。在PHP中,可以通过`json_encode`将数组或对象转换为JSON字符串,通过`json_decode`将JSON字符串转换为数组或对象。例如: ```php $phpArray = array("fruit" => "苹果", "color" => "红色"); $jsonString = json_encode($phpArray); echo $jsonString; // 输出 {"fruit":"苹果","color":"红色"} $decodedArray = json_decode($jsonString, true); echo $decodedArray["fruit"]; // 输出 "苹果" ``` 在JavaScript中,JSON的处理更加直接,因为其语言本身支持JSON语法。例如: ```javascript const jsonString = '{"fruit": "苹果", "color": "红色"}'; const jsObject = JSON.parse(jsonString); console.log(jsObject.fruit); // 输出 "苹果" ``` ### 总结 PHP数组既可以作为索引数组也可以作为关联数组,而JavaScript数组仅支持索引数组PHP中的关联数组与JavaScript对象类似,但JavaScript对象在属性访问方面更为灵活。此外,PHP和JavaScript都可以通过JSON格式进行数据交换,但在JavaScript中JSON的处理更为直接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值