如何在PHP中获取新推送项的数字键?

8
$arr[] = $new_item;

能否通过编程获取新推送的项目?

请注意,不必使用count($arr)-1:

$arr[1]=2;
$arr[] = $new_item;

在上述情况下,它是2

编辑:请忽略我,我读错了问题。是哪个交互元素被点击了?按钮、单选框、复选框还是……? - Extrakun
Bryan 和 Haim 的回答都是正确的……然而,大多数情况下,当有人像这样提出问题时,他们并不真正关心数组的最后一个键,而是真正想要的是数组中的最后一个元素。如果是这种情况,请只使用 end() 函数本身,不用担心它的键。 - philfreo
6个回答

13

end()函数可以返回数组的最后一个值,如果需要获取该值对应的键名,可以在调用end()后使用key()方法。

我写完答案后发现这个链接中也有相关的函数说明:http://www.php.net/manual/en/function.end.php

function endKey($array){
 end($array);
 return key($array);
}

我认为那样做不会起作用。根据PHP文档:“每个数组都有一个指向其“当前”元素的内部指针,该指针初始化为插入到数组中的第一个元素。”使用end()函数可能会达到目的。 - rossipedia

6

max(array_keys($array)) should do the trick


2
最安全的方法是:
$newKey = array_push($array, $newItem) - 1;

这似乎可以工作。但是它感觉不对。我在这里漏掉了什么吗? - Achshar
这是我目前想到的最简洁的方法。 - Pedro Moreira
我知道这很老,但是array_push不会返回键。它返回数组的长度。添加任意键可能会引入错误。只有在键是从零开始的连续序列时才有效。 - Pedro Amaral Couto
1
@PedroAmaralCouto 是的,这是针对索引数组的简单解决方案。在php中,具有任意键的数组被视为关联数组,并需要不同的处理方式。 - Pedro Moreira

1

你可以尝试:

max(array_keys($array,$new_item))

array_keys($array,$new_item)将返回与值$new_item相关联的所有键,作为一个数组。

我们对所有这些键中最后添加且具有max值的那个键感兴趣。


0
你可以使用一个变量来跟踪数组中的项目数量:
$i = 0;
$foo = array();
$foo[++$i] = "hello";
$foo[++$i] = "world";

echo "Elements in array: $i" . PHP_EOL;
echo var_dump($foo);

这将覆盖现有的键,如果没有键,则与仅使用$foo []相比没有任何好处,除了创建一个以1为基础的数组(这可能是有利的)。 - Duncan

0

如果它是新创建的,你应该保留对该元素的引用。:)

你可以像这样使用array_reverse

$arr[] = $new_item;
...
$temp = array_reverse($arr);
$new_item = $temp[0];

或者你可以这样做:

$arr[] = $new_item;
...
$new_item = array_pop($arr);
$arr[] = $new_item;

如果您将数组用作堆栈(似乎是这样),则应避免混合使用关联键。 这包括设置$arr[$n],其中$n > count($arr)。 坚持使用array_*函数进行操作,如果必须仅使用索引,则只有在0 < $n < count($arr)的情况下才能这样做。 这样,索引应该保持有序和连续,然后您可以依赖于$arr[count($arr)-1]是正确的(如果不正确,则存在逻辑错误)。

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