比较Php数组中值的位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较Php数组中值的位置相关的知识,希望对你有一定的参考价值。

$commands = array();

    for($p = 0; $p < $commandCount ; $p++){
          $commands[$p] = $_POST['select'.$p];
    }

所以我有这个Array $命令。在此Array中,存储了一个命令列表。我必须检查命令“mark”存储在哪个位置,以及后面是否有某个命令。一些示例数据可以在$命令中:“mark”,“ignore”,“pick”,“random”你会怎么做?

答案

这是一个带有一组测试用例的演示,以充分表达它的工作原理并识别边缘情况:(Demo Link

*注意,当没有找到针时,array_search()会返回false

$commands = array("mark", "ignore", "pick", "random");

$attempts = array("mark", "ignore", "pick", "random", "bonk");
foreach($attempts as $attempt){
    echo "$attempt => ";
    $index=array_search($attempt,$commands);
    //                                    vv---increment the value
    if($index===false || !isset($commands[++$index])){  // not found or found last element
        $index=0;                                      // use first element
    }
    echo $commands[$index],"
";
}

“或”(||)条件将“短路”,因此如果$indexfalse,它将退出条件而不调用第二个表达式(isset())。

输出:

mark => ignore
ignore => pick
pick => random
random => mark
bonk => mark
另一答案

您可以使用$index = array_search("mark", $commands)返回第一次出现的命令“mark”的索引,然后您可以使用$commands[$index + 1]来获取数组中的下一个命令。

您还需要检查是否$index != null否则它可能会返回$commands数组中的第一项,因为null被解释为0

另一答案

刚做了一些双重检查,你要先断言你的数组首先包含mark的值。否则array_search将返回false,并且很容易将其转换为0。

支持文档 :

PHP in_array

PHP array_search

$commands = array("mark", "ignore", "pick", "random");
//checks if $command contains mark, 
//gets first index as per documentation 
//Or sets index to -1, ie No such value exists.
 $index = in_array("mark",$commands) ? array_search("mark",$commands):-1;
//gets the next command if it exists
 $nextCommand = $index!=-1? $commands[++$index]:"Unable to Find Command: mark";

以上是关于比较Php数组中值的位置的主要内容,如果未能解决你的问题,请参考以下文章

二分查找法

二分查找算法(JAVA)

二分查找算法(JAVA)

算法——二分查找算法(Java实现)

如何更改 numpy 数组中值的位置?

经典面试题:请手写一个二分查找法