2

アレイの 1 つで奇妙な問題が発生しました。配列は次のようになります。次に、print_r() を実行します。

Array
(
    [id] => 1688
    [pCid] => 1992
    [category] => 177
    [archive] => 0
    [catid] => 
    [pid] => 
    [order_nr] => 1
    [cOrder] => 1
    [cSeo] => no-colour
    [order_id] => 0
    [price] => 8.99
    [sale_price] => 7.99
    [sale_expiry] =>
    [oPrices] => 7.99
    [member_price] => 6.99
    [set] => 0
)

そして私が簡単なことをするとき

if(isset($array['set']['stock'])){}

$array['set'] が現在 0 に等しい場合、true を返します。

var_dump(isset($array['set']['stock'])) //bool(true)

true を返します

なぜこれが起こっているのですか?

( is_array($array['set']) チェックを実行してチェックの問題を解決しましたが、 isset が機能しない理由はまだわかりません)

次のように同じ問題を再現できることに気付きました。

<?php
$colour = array();
$colour['set'] = '0';

var_dump(isset($colour['set']['stock'])); //will return true
?>
4

3 に答える 3

1

文字列は文字の配列です。['stock'] 配列が比較されるとき、文字列を見ているときに最初の文字が比較されます。

<?php
$colour = array();
$colour['set'] = 'foo';

var_dump($colour['set']['stock']); // Returns 'f'
?>

たとえば、「f」を返します。

于 2011-11-03T14:52:19.183 に答える
0

PHP では (他のほとんどの言語と同様)、文字列は文字の配列としてアクセスできます。

そのため、実際に のオフセットに$str['stock']アクセスしていることになります。文字列には数値オフセットのみがあるため、文字列は整数にキャストされ、数値が含まれていないため、結果は. したがって、設定されている文字列の最初の文字である にアクセスします。'stock'$str'stock'0$str[0]

于 2011-11-03T14:51:26.683 に答える
-1

isset() は、特定の変数または配列要素が存在するかどうかをチェックします。nullaまたは aを含む ANYTHING を含む変数/要素は、0存在するため、まだ設定されています。ゼロ以外の内容を確認したい場合は、empty()代わりに使用します。変数が存在するが、、、、などを含む場合は true に戻ります...''ただしnull、isset テストを行う必要があります。 ) 実際には存在しない配列キーで実行しようとすると、「そのような配列キーはありません」という警告が表示されます。0'0'

于 2011-11-03T14:51:13.430 に答える