2017-08-14 41 views
1

我需要從具有不同名稱的url中獲取許多參數,並檢查它們是否已設置。 (它們的價值不一定很重要)。檢查以簡明的方式設置了哪些參數 - PHP

https://example.com?one=true&two=true&three=true  etc. 

問題是,在我想要做的事情中,他們中的任何一個都可以設置或不設置。

所以我需要的方式幫助抓住哪些是URL,然後在清潔的方式設置,最好儲存而不是有多個$_GETisset()線匹配參數的名稱不同的變量, if陳述遍佈各地。

編輯:提交參數將始終在URL中:我想這可能只是使用foreach循環完成。

if (isset($_GET['submit'])) { 
    foreach ($_GET as $key => $value) { 
    $key = $value; 
    echo $key; 
} 
} 

這將回聲出$鍵的值,(這是我所需要的,因爲那時我知道它被設置),但後來我需要得到什麼$鍵設置爲實際的名稱。

感謝

編輯2: 我已經找到了如何做到這一點 - 所有我需要的是得到的URL參數和了解他們的名字。對不起,如果我已經寫得很好。

if (isset($_GET['submit'])) { 
foreach ($_GET as $key => $value) { 
$$value = $key; 
echo $key; 
} 
} 

我發現使用可變的變量是我需要的(因此2 $$) 這給我,到了最後,$鍵作爲名稱的任何參數都在url中,存儲在$值它有相同的名字。

+0

當其中一個沒有設置時會發生什麼? –

+0

在您動態創建一組與參數名稱匹配的不同變量後,是否考慮過在實際使用其中一個變量時需要執行的操作? –

+0

我會創建一個值設置爲false(或其他)的預期鍵數組,然後與$ _GET合併。我不會根據名稱動態創建變量。這可能會導致各種問題。 – Dave

回答

1

您需要使用extract()提取所有的鍵從一個數組中,並把它們作爲變量

變量導入到當前的符號表從數組

這裏是一個小例子:

$_GET['var_1'] = 1; 
$_GET['var_2'] = 2; 
$_GET['var_3'] = ''; 
extract($_GET); 
echo $var_1; 

使用以下代碼獲取空白以及設置鍵/值:

$newArray = array_filter($_GET); 
$sub_key = array_keys($newArray); 
print_r($sub_key); // this will give you all keys that have values 

$sub_values = array_values($newArray); 
print_r(array_diff($_GET, $sub_values)); // all keys that have empty values 
+0

爲什麼會反對票?如果有的話,希望能夠理解並從我的錯誤中學習。 –

+0

我沒有downvote,但這並沒有回答這個問題。它只是確保提供的所有參數都不是空的,它不會驗證預期的參數是否存在。 – jfadich

+0

那麼,OP想要_存儲在不同的變量匹配parameters_的名稱,並可以使用'extract()'來實現,對吧?第二個條件檢查,如果任何數組元素爲空或未設置。 –

0

如果有鑰匙存在或不存在的可能性,有一個類/函數可以檢查並返回是有幫助的。一個框架可能工作是這樣的:

class Request 
     { 
      public static function getGet($key=false) 
       { 
        if(!empty($key)) 
         return (isset($_GET[$key]))? $_GET[$key] : false; 

        return $_GET; 
       } 

      public static function getPost($key=false) 
       { 
        if(!empty($key)) 
         return (isset($_POST[$key]))? $_POST[$key] : false; 

        return $_POST; 
       } 
     } 

# Would try to retrieve $_GET['one'] 
$val1 = Request::getGet('one'); 
# Would try to retrieve $_POST['two'] 
$val2 = Request::getPost('two'); 

我不會創建動態的變量,因爲你還是要檢查自己是否設置或什麼的。根據使用和PHP版本,你可以這樣做:

if(Request::getGet('whatever')) { 
    # Do something 
} 
+0

我不認爲它需要像這樣複雜 - 我正在考慮for循環或foreach循環可以做我所需要的。我會編輯我的想法。 –

+0

是的,也許做一個使用的例子。我有一個很好的方法來返回一個值,並避免一堆'isset'語句來避免'undefined variable' /'undefined index'錯誤 – Rasclatt

+0

顯示你如何在循環之後使用實際值...我仍然不會不明白你爲什麼想要做你想做的事。你是想回應一些東西,或者是那些變量的最終產品? – Rasclatt

0

您可以檢查所有的參數都被檢查$_GET

$expected_parameters = ['one', 'two', 'three']; 
if(count(array_intersect($expected_parameters, array_keys($_GET))) !== count($expected_parameters)) { 
    // Failed validation 
} 

的按鍵提供了將驗證所有必需的參數是目前,但它並不能確保它們不是空的。我會建議做進一步驗證,以確保參數是所需的類型,但在你的問題中,你說這不是一個要求。

要將參數設置爲各自的變量,您可以使用extract()

extract($_GET) 
+0

是的,但我需要知道哪些預期參數設置 - 設置的名稱,然後最好將它們存儲在與其名稱相同的變量中。 –

+0

@LucaSarif'extract($ _GET)'將根據鍵名稱獲取參數並創建新變量。所以'$ _GET ['one']'將變成'$ one' – jfadich

相關問題