$commands = array();
for($p = 0; $p < $commandCount ; $p++){
$commands[$p] = $_POST['select'.$p];
}
所以我有这个Array $命令。在此Array中,存储了一个命令列表。我必须检查命令的位置&#34;标记&#34;存储,如果在它之后跟随某个命令。 一些示例数据可以在$命令中: &#34;标记&#34;,&#34;忽略&#34;,&#34;选择&#34;,&#34;随机&#34; 你会怎么做?
答案 0 :(得分:1)
您可以使用$index = array_search("mark", $commands)
返回第一次出现的命令“mark”的索引,然后您可以使用$commands[$index + 1]
来获取数组中的下一个命令。
您还需要检查是否$index != null
,否则它可能会返回$commands
数组中的第一项,因为null
被解释为0
答案 1 :(得分:1)
以下是一系列测试用例的演示,以充分表达其工作原理并识别边缘情况:(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],"\n";
}
&#34;或&#34; (||
)条件将&#34;短路&#34;,因此如果$index
为false
,它将退出条件而不调用第二个表达式(isset()
)。
输出:
mark => ignore
ignore => pick
pick => random
random => mark
bonk => mark
答案 2 :(得分:-1)
刚刚做了一些双重检查,你首先想断言你的数组首先包含 mark 的值。否则array_search将返回false,并且很容易将其转换为0。
支持文档:
$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";