PHP 获取上一个数组元素,知道当前数组键

2022-08-30 13:52:48

我有一个包含特定键的数组:

array(
    420 => array(...), 
    430 => array(...), 
    555 => array(...)
)

在我的应用程序中,我知道当前键(例如)。我想得到前面的数组元素。在此示例中,它是具有键 的数组元素。如何在 PHP 中执行此操作?我试图使用,但对于这个函数,我们应该知道当前的数组元素。我没有找到函数,是什么设置了当前的数组元素。555430prev()


答案 1

一个选项:

将内部指针设置为某个位置,您必须将其转发(使用keynext,也许在之前进行重置以确保从数组的开头开始):

while(key($array) !== $key) next($array);

然后你可以使用 prev()

$prev_val = prev($array);
// and to get the key
$prev_key = key($array);

根据之后要对阵列执行的操作,您可能需要重置内部指针。

如果数组中不存在键,则有一个无限循环,但这可以通过以下方法解决:

 while(key($array) !== null && key($array) !== $key)

当然不会再给你正确的值了,但我假设你正在寻找的键无论如何都会在数组中。prev


答案 2

具有快速查找功能的解决方案:(如果您必须多次执行此操作)

$keys = array_flip(array_keys($array));
$values = array_values($array);
return $values[$keys[555]-1];

array_fliparray_keys将返回一个数组,将键映射到它们在原始数组中的位置,例如.(($array));array(420 => 0, 430 => 1, 555 => 2)

array_values() 返回一个数组,将位置映射到值,例如 .array(0 => /* value of $array[420] */, ...)

因此,有效地返回前面的元素,假设当前元素具有键 555。$values[$keys[555]-1]

替代解决方案:

$keys = array_keys($array);
return $array[$keys[array_search(555, $keys)-1]];