Php 数组\u密钥\u存在$argv不能正常工作?
我正在编写一个php代码,它打算从Unix控制台运行,带有几个可选的开关。我无法让脚本识别开关 我以这种方式从控制台运行脚本Php 数组\u密钥\u存在$argv不能正常工作?,php,unix,Php,Unix,我正在编写一个php代码,它打算从Unix控制台运行,带有几个可选的开关。我无法让脚本识别开关 我以这种方式从控制台运行脚本 ./<scriptname>.php v 但尽管行var_dump$argv;输出: array(2) { [0]=> string(21) "./<scriptname>.php" [1]=> string(1) "v" } 以下行echo\n字母:$verbose:\n;输出verbose:::这是false 为
./<scriptname>.php v
但尽管行var_dump$argv;输出:
array(2) {
[0]=>
string(21) "./<scriptname>.php"
[1]=>
string(1) "v"
}
以下行echo\n字母:$verbose:\n;输出verbose:::这是false
为什么??
非常感谢 v是$argv中的值,而不是键。您可以通过以下方式进行检查:
注意:in_数组对数组内容执行线性搜索,如果满足以下一个或多个条件,这可能不是最好的方法:
您正在循环中调用它
数组很长
您期望大量的检查返回false
在这种情况下,这些都不是真的,所以你在这里很好。但是如果情况不同,您可以考虑使用数组的值作为另一个数组的密钥,这样就可以用O1的摊销成本来检查,而不是on:。
v是$argv内的值,不是键。您可以通过以下方式进行检查:
注意:in_数组对数组内容执行线性搜索,如果满足以下一个或多个条件,这可能不是最好的方法:
您正在循环中调用它
数组很长
您期望大量的检查返回false
在这种情况下,这些都不是真的,所以你在这里很好。但是如果情况不同,您可以考虑使用数组的值作为另一个数组的密钥,这样就可以用O1的摊销成本来检查,而不是on:。
除此之外,我不明白为什么人们会使用array_key_exists-isset$array[$key]是相同的,而且速度更快。他说,微优化感谢您的提示@DaveRandom@DaveRandom:IMO array_key_exists,如果key存在,isset不同,但相关值为空。你可能会关心我过去有理由关心的差异。除此之外,我不明白为什么人们会使用array_key_存在-isset$array[$key]是相同的,而且速度更快他说,微优化感谢您提供的提示@DaveRandom@DaveRandom:IMO array_key_存在,如果key存在但关联的值为null,则设置不同。你可能会关心我过去有理由关心的差异。
array(2) {
[0]=>
string(21) "./<scriptname>.php"
[1]=>
string(1) "v"
}
$verbose = in_array("v", $argv);
// 100% safe as long as you don't mind "losing" duplicate values:
$lookup = array_fill_keys(array_keys($argv), true);
// Should be equivalent, at first sight looks safe, might be faster
// In THIS case it works just fine, but in this case you wouldn't want to
// flip the array in the first place
$lookup = array_flip($argv);
$verbose = isset($lookup["v"]);