PHP中使用array_push()如何获取插入元素的索引?
向数组插入值并获取对应索引的可行方法
嘿,我来给你捋捋怎么实现这个需求~你说的这种“带自动递增键”的场景,其实分两种情况:一种是普通索引数组,另一种是需要永不重复递增键的关联数组(类似对象),下面分别给你说可行的方法:
情况一:要永不重复的自动递增键(不受删除元素影响)
这种场景下,普通数组可能满足不了,因为删除元素后索引会有空缺,但如果你想让新插入的键一直顺着之前的数字往下走,绝不复用已删除的键,那手动维护计数器是最靠谱的办法,简单高效还没坑:
// 用对象来模拟带自定义键的“数组” const myCustomArray = {}; // 定义一个计数器,记录下一个要使用的键 let nextKey = 0; // 封装一个插入函数,返回插入值对应的键 function addItem(value) { const currentKey = nextKey; myCustomArray[currentKey] = value; nextKey++; // 计数器自增,保证下一个键更大 return currentKey; } // 试试效果 const key1 = addItem("草莓"); // 返回0 const key2 = addItem("芒果"); // 返回1 delete myCustomArray[0]; // 删掉第一个元素 const key3 = addItem("西瓜"); // 返回2,完全不会复用0的键 console.log(myCustomArray); // {1: "芒果", 2: "西瓜"}
这个方法不管你删多少元素,键都会一直按顺序递增,每次插入都能直接拿到对应的键,完美符合你的需求~
情况二:普通索引数组(允许索引填补空缺)
如果你用的是JS原生的Array,那用push()方法的时候,它会返回新数组的长度,而这个长度减一就是插入元素的索引。不过要注意,就算你删除了中间的元素,push()还是会在当前数组的最后位置插入,索引会接着最大的那个索引往下走:
const arr = ["苹果", "香蕉", "葡萄"]; const index1 = arr.push("菠萝") - 1; // index1是3 delete arr[1]; // 现在数组变成 ["苹果", empty, "葡萄", "菠萝"] const index2 = arr.push("橙子") - 1; // index2是4,不会去填1的空位
这种情况下,你能拿到插入的索引,但数组长度和索引的关系是“长度=最大索引+1”,如果中间有空位,数组长度会比连续索引的情况大,但push()返回的长度减一确实是新元素的索引。
可选方案:动态计算下一个键(适合小规模数据)
如果你不想维护计数器,也可以通过遍历现有键来找到最大的数字键,再加1作为新键。不过这种方法在数据量大的时候效率不高,适合小体量的数据:
const myCustomArray = {}; function addItem(value) { // 把现有键转成数字,过滤掉非数字的键 const existingKeys = Object.keys(myCustomArray).map(Number).filter(key => !isNaN(key)); // 找到最大的键,没有的话就从0开始 const maxKey = existingKeys.length > 0 ? Math.max(...existingKeys) : -1; const currentKey = maxKey + 1; myCustomArray[currentKey] = value; return currentKey; }
不过要注意,如果你删掉了所有元素,这个方法会从0重新开始计数,会复用之前的键,如果你不想这样,还是第一种方法更合适。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

