比较 Php 数组中值的位置
Compare Positions of Values in Php Array
$commands = array();
for($p = 0; $p < $commandCount ; $p++){
$commands[$p] = $_POST['select'.$p];
}
所以我有这个 Array $commands。在这个数组中,存储了一个命令列表。我必须检查命令 "mark" 存储在哪个位置,以及它后面是否有某个命令。
一些可以在 $commands 中的示例数据:
"mark"、"ignore"、"pick"、"random"
你会怎么做?
您可以使用 $index = array_search("mark", $commands)
它将 return 命令第一次出现的索引 "mark" 然后您可以使用 $commands[$index + 1]
获取下一个命令数组。
您还需要检查是否 $index != null
否则它可能 return 您的 $commands
数组中的第一项,因为 null
被解释为 0
刚刚做了一些双重检查,您首先要断言您的数组首先包含 mark 的值。否则 array_search 将 return 为 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";
这里有一组测试用例的演示,可以充分说明它的工作原理并识别边缘用例:(Demo Link)
*注意,array_search()
returns 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";
}
"or" (||
) 条件将 "short circuit",因此如果 $index
是 false
它将退出条件而不调用第二个表达式 ( isset()
).
输出:
mark => ignore
ignore => pick
pick => random
random => mark
bonk => mark
$commands = array();
for($p = 0; $p < $commandCount ; $p++){
$commands[$p] = $_POST['select'.$p];
}
所以我有这个 Array $commands。在这个数组中,存储了一个命令列表。我必须检查命令 "mark" 存储在哪个位置,以及它后面是否有某个命令。 一些可以在 $commands 中的示例数据: "mark"、"ignore"、"pick"、"random" 你会怎么做?
您可以使用 $index = array_search("mark", $commands)
它将 return 命令第一次出现的索引 "mark" 然后您可以使用 $commands[$index + 1]
获取下一个命令数组。
您还需要检查是否 $index != null
否则它可能 return 您的 $commands
数组中的第一项,因为 null
被解释为 0
刚刚做了一些双重检查,您首先要断言您的数组首先包含 mark 的值。否则 array_search 将 return 为 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";
这里有一组测试用例的演示,可以充分说明它的工作原理并识别边缘用例:(Demo Link)
*注意,array_search()
returns 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";
}
"or" (||
) 条件将 "short circuit",因此如果 $index
是 false
它将退出条件而不调用第二个表达式 ( isset()
).
输出:
mark => ignore
ignore => pick
pick => random
random => mark
bonk => mark