簡體   English   中英

為什么in_array()不適用於$ _POST?

[英]Why does in_array() not work on $_POST?

我正在嘗試檢查用戶提交的數據,來自$_POST ,至少具有與我傳遞的數組相同的元素。 我這樣做是因為我稍后會通過調用$_POST['element']來使用這些元素,我不喜歡有關該元素的錯誤不存在(未設置)。 :)

我不想使用像isset($_POST['x'], $_POST['y'], $_POST['z'])這樣的東西isset($_POST['x'], $_POST['y'], $_POST['z'])因為每次我需要重寫$_POST而且它似乎也不可讀。

我試圖用in_array(array('x', 'y', 'z'), $_POST)但它不工作(返回false時,它應該返回true )。 任何想法如何使這項工作? :)我確定我的空字符串為$_POST['x']$_POST['y']$_POST['z'] 我甚至試圖將軟管三個$_POST元素的值更改為空字符串以外的其他值 - 仍然...沒有按預期工作。 :(

謝謝你的建議! :)

編輯:

剛剛發現in_array()檢查值,而不是鍵。 然后,我試着這樣做......

in_array(array('title', 'slug', 'content'), array_keys($_POST))

仍然,它返回false 怎么會這樣? ; /

編輯#2:

好的,這是調試結果......

傳入$_POST

array(3) {
    ["title"]=>
    string(0) ""
    ["slug"]=>
    string(0) ""
    ["content"]=>
    string(0) ""
}

array_keys($_POST)

array(3) {
    [0]=>
    string(5) "title"
    [1]=>
    string(4) "slug"
    [2]=>
    string(7) "content"
}

in_array(array('title', 'slug', 'content'), array_keys($_POST))

bool(false)

問題......為什么這是false 據我所知,我做的都是正確的。

編輯#3:

最后,我創建了自己的方法,名為Arr::keys_exists($keys, $array)

in_array()檢查數組中是否存在 ,而不是 如果你想檢查是否存在密鑰,那么你需要像...那樣的東西

in_array('x', array_keys($_POST));

或者更簡單......

array_key_exists('x', $_POST);

如果要一次檢查多個鍵:

$required_keys = array('x'=>1, 'y'=>1, 'z'=>1);
$missing_keys = array_diff_key($required_keys, $_POST);
$missing_keys_count = count($missing_keys);

因為in_array檢查針是否在陣列中。 請參見手冊頁的示例#3。 array_key_exists不能使用鍵作為第一個參數,因為數組對於數組作為鍵無效。

你想要像all_in_array(array $needles, array $haystack); array_all_keys_exists(array $keys, array $search); 返回是否所有元素都在數組中。 你可以自己實現這樣的東西,或者在這里尋求更多的幫助。

in_array(array('x','y','z'),$ _ POST),但它不起作用(當它返回true時返回false)

不,它不應該。 閱讀in_array的手冊。

檢查數組中是否存在

相反,你想檢查數組鍵。 使用array_keys獲取所有鍵,然后使用in_array。

使用in_array,您一次只能測試一個值,而不是像您嘗試的那樣完整的值數組。

換句話說,如果你這樣做:

in_array(array('title', 'slug', 'content'), array_keys($_POST))

它將找到keys數組的一個元素 ,其中包含一個帶有title,slug和comment的數組,這不是你想要的。

首先:

我不想使用像isset這樣的東西($ _ POST ['x'],$ _POST ['y'],$ _POST ['z'])因為每次我需要重寫$ _POST而且它似乎也不可讀。

你永遠不應該改變其中一個超級全局變量;)

但是, in_array()搜索值而不搜索鍵

in_array(array('x', 'y', 'z'), array_key($_POST))
function getPost( $index, $default = '' )
{
    if ( isset( $_POST[ $index ] ) )
    {
        return $_POST[ $index ];
    }

    return $default;
}

如果要確保存在多個密鑰,則array_diff可能適用:

!array_diff(array('title', 'slug', 'content'), array_keys($_POST))

您可能也對array_intersect_uassoc感興趣。

@Eric是對的,試試這個 -

in_array(array('title', 'slug', 'content'), array(array_keys($_POST)))

你不明白in_array

$a = array(
    'x' => 1
);
echo in_array(array('x', 'y', 'z'), $a); // false

$a['an array'] = array('x', 'y', 'z');
echo in_array(array('x', 'y', 'z'), $a); // true

暫無
暫無

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

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