簡體   English   中英

PHP的in_array給出奇怪的結果

[英]php in_array giving odd result

我已經閱讀了有關in_array的所有其他文章,但仍然不明白為什么我會給出奇怪的結果。 我正在從其他人那里繼承此代碼,並且不完全理解他們為什么要做某些事情。 用戶登錄時,數據將從數據庫中獲取,其中一個字段是其“級別”。 1是管理員,2是普通用戶,等等。從數據庫中獲取數據后,我們將用戶級別(存儲為a:1:{i:0; s:1:“ 2”)放入一個數組中:

$user_level = unserialize($this->result['user_level']); 
$_SESSION['unt']['user_level'] = $user_level;

稍后我們檢查一下這是否是管理員:

error_log(print_r($_SESSION['abc']['user_level']));  //this is always "1"
if (in_array('1', $_SESSION['abc']['user_level'])) {   //should be yes, correct?

但是,即使SESSION變量為1,if語句也永遠不會評估為真。我缺少什么?

$_SESSION['abc']['user_level']似乎不是數組。 看起來您想要以下之一。

如果gettype($ _ SESSION ['abc'] ['user_level'])是'integer':

if ($_SESSION['abc']['user_level']) === 1) {

如果gettype($ _ SESSION ['abc'] ['user_level'])是'string':

if ($_SESSION['abc']['user_level']) === '1') {

如果gettype($ _ SESSION ['abc'] ['user_level'])是'string'並且其值實際上包含引號:

if ($_SESSION['abc']['user_level']) === '"1"') {

如果是數組,則輸出將具有以下結構,而不僅僅是“ 1”:

Array
(
    [0] => 1
)

即使我注意到輸入字符串中缺少右括號}但我只是假設您在復制粘貼時可能已經錯過了。

a:1:{i:0;s:1:"2"

所以in_array不是問題,但是您的輸入字符串是問題。
display_errors設置為Off時,嘗試反unserialize時不會看到任何錯誤。

您可以使用以下函數檢查輸入是否為要反序列化的有效字符串:

//  Copied from http://www.php.net/manual/en/function.unserialize.php
function is_serialized( $str )
{
    return( $str == serialize( false ) || @unserialize( $str ) !== false );
}

然后遵循以下思路:

    $inputString = 'a:1:{i:0;s:1:"2";}';   //  Is valid and is holding one array of info
//  $inputString = 'a:1:{i:0;s:1:"2"';   //  Invalid as is missing a closing baracket }

if( ! is_serialized( $inputString ) )
{
    echo 'Is not serialized';
}
else
{
    $user_level = unserialize( $inputString );

    $_SESSION['unt']['user_level'] = $user_level;   //  Is an array

//  Note the second argument as was already pointed by @AsksAnyway
    error_log( print_r( $_SESSION['unt']['user_level'] , true ) );

    var_dump( in_array( '1' ,$_SESSION['unt']['user_level']) );

    var_dump( in_array( '2' ,$_SESSION['unt']['user_level']) );
}

暫無
暫無

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

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