Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取数组中前导和后继的数量_Php_Arrays - Fatal编程技术网

Php 获取数组中前导和后继的数量

Php 获取数组中前导和后继的数量,php,arrays,Php,Arrays,我有一个对象数组,我想从给定的值计算上一个和下一个索引的数量,直到某个最大值 Array ( [0] => stdClass Object ( [id] => 460 ) [1] => stdClass Object ( [id] => 484 ) [2] => stdClass Object (

我有一个对象数组,我想从给定的值计算上一个和下一个索引的数量,直到某个最大值

Array
(
    [0] => stdClass Object
        (
            [id] => 460
        )

    [1] => stdClass Object
        (
            [id] => 484
        )

    [2] => stdClass Object
        (
            [id] => 485
        )

    [3] => stdClass Object
        (
            [id] => 486
        )

    [4] => stdClass Object
        (
            [id] => 489
        )

    [5] => stdClass Object
        (
            [id] => 501
        )

    [6] => stdClass Object
        (
            [id] => 654
)
案例:最大计数为2

  • 如果值为460,则上一个索引计数为0(如
    [0]
    ),下一个索引计数为2(如
    [1]
    [2]
  • 如果值为485,则上一个索引计数为2(如
    [0]
    [1]
    ),下一个索引计数为2(如
    [3]
    [4]
  • 如果值为501,则上一个索引计数为2(如
    [3]
    [4]
    ),下一个索引计数为1(如
    [6]
  • 如果值为654,则上一个索引计数为2(如
    [4]
    [5]
    ),下一个索引计数为0(如
    [6]

当给定一个数组、一个值和一个最大计数时,如何获得这两个计数?

您似乎想知道在搜索值的元素前后是否有2个元素,如果没有,有多少个元素(0或1)

以下是您可以使用的函数:

它将返回两个值(作为一个数组),即上一个值和下一个值。如果找不到您要查找的值,则返回-1

你可以这样称呼它:

$arr = [ 
    (object) ["id" => 460],
    (object) ["id" => 484],
    (object) ["id" => 485],
    (object) ["id" => 486],
    (object) ["id" => 489],
    (object) ["id" => 501],
    (object) ["id" => 654],
];

list($prev, $next) = getPrevNext($arr, 484, 2);

echo "prev: $prev, next: $next"; // prev: 1, next: 2

请更清楚地说明你想做什么。我不明白你想实现什么,也不明白“上一个”和“下一个”是如何计算的。Sory@Ali,我不知道如何编写代码来尝试它。获取你要查找的条目的数组索引。这个减1是之前的条目数。如果小于0,则将其等于0。下一个从数组长度开始的逻辑相同。如果要获取3个元素,请更改此值?对吧?<代码>返回[min(2,$i),min(2,count($arr)-1-$i]
返回[min(3,$i),min(3,计数($arr)-1-$i]更新了答案以接受该数字作为额外参数。
$arr = [ 
    (object) ["id" => 460],
    (object) ["id" => 484],
    (object) ["id" => 485],
    (object) ["id" => 486],
    (object) ["id" => 489],
    (object) ["id" => 501],
    (object) ["id" => 654],
];

list($prev, $next) = getPrevNext($arr, 484, 2);

echo "prev: $prev, next: $next"; // prev: 1, next: 2