簡體   English   中英

array_key_exists對於$ argv無法正常工作?

[英]array_key_exists not working properly for $argv?

我正在編寫一個php代碼,該代碼應從Unix控制台運行,並帶有幾個可選的開關。 我在使腳本識別開關方面遇到問題。

我這樣從控制台運行腳本

./<scriptname>.php v

希望代碼中可以選擇“ v”開關,但事實並非如此。 這是要拿起它的代碼。

global $argv; // specified, but probably not needed
$verbose = array_key_exists("v", $argv); // should work but it doesn't!
// $verbose= isset($_GET["v"]); // tried, but doesn't work because it's run from console

但是盡管有var_dump($argv); 輸出:

array(2) {
  [0]=>
  string(21) "./<scriptname>.php"
  [1]=>
  string(1) "v"
}

下面的行echo "\\nverbose: :$verbose:\\n"; 輸出verbose: :: :(這是false )。

為什么呢 非常感謝!

"v"$argv內的 ,而不是 您可以使用in_array進行檢查:

$verbose = in_array("v", $argv);

注意: in_array對數組內容執行線性搜索,如果滿足以下一個或多個條件,這可能不是最佳方法:

  • 您正在循環內調用它
  • 數組很長
  • 您期望大量支票返回false

在這種情況下,這些都不是正確的,因此您在這里很好。 但是,如果情況不同,則可以考慮將數組的值用作另一個數組的鍵,以便可以使用O(1)而不是O(n)的攤余成本進行檢查:

// 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"]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM