PHP:オブジェクト型を配列にキャストした後の奇妙な配列の動作

ジーノペイン

(を使用してd値のarray型キャストを行うjson_decode$assoc = false、PHPは文字列インデックスを使用して配列を作成します。

$a = (array)json_decode('{"7":"value1","8":"value2","9":"value3","13":"value4"}');

var_export($a);

//array (
//  '7' => 'value1',
//  '8' => 'value2',
//  '9' => 'value3',
//  '13' => 'value4',
//)

そして、何らかの理由でこれらのインデックスにアクセスできません。

var_dump(isset($a[7]), isset($a['7']));

//false
//false

PHP自体で同じ配列を作成しようとすると、数値インデックスを使用して作成され(文字列は自動的に変換されます)、文字列と数値の両方を使用して値にアクセスできます。

$c = array('7' => 'value1', '8' => 'value2', '9' => 'value3','10' => 'value4');

var_export($c);

var_dump(isset($c[7]), isset($c['7']));

//array (
//  7 => 'value1',
//  8 => 'value2',
//  9 => 'value3',
//  13 => 'value4',
//)
//
//true
//true

ここで何が起こっているのか誰か知っていますか?それは古いPHPバージョンのバグですか(この問題はPHPバージョン> = 7.2で修正されているようですが、変更ログに関連するものが見つかりません)?

これが起こっていることのデモです:https//3v4l.org/da9CJ

だまします

これは、7.2.0で修正されたバグ#61655に関連しているようです

オブジェクトプロパティでは、名前によるルックアップは常に文字列ですが、配列では数値文字列( "22200"など)キーは数値に変換されますが、文字列には変換されなくなります。変換内部HashTableが変更されていない場合、変換後、キールックアップは失敗します。

明確化:$a["2000"]常にとして解釈されますが$a[2000](array)オブジェクト文字列キーを数値にキャストできませんでした。したがって、配列には文字列数値インデックスが含まれていましたが、配列構文の自動キャストにより、それらにアクセスできませんでした。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブジェクトを配列にキャスト

分類Dev

Java:オブジェクトを配列型にキャストする

分類Dev

Javaでプリミティブ型配列をオブジェクト配列にキャストする

分類Dev

オブジェクトの配列を目的のクラスの配列にキャストする

分類Dev

オブジェクト配列をLong配列にキャストするときのClassCastException

分類Dev

配列オブジェクトの中央/最初に挿入した後、配列オブジェクトのキーを変更します

分類Dev

配列オブジェクトの中央/最初に挿入した後、配列オブジェクトのキーを変更します

分類Dev

(配列)型キャスト奇妙な動作オブジェクトから配列への変換

分類Dev

Ruby:配列内のオブジェクトを変換した後にキー/値を渡す

分類Dev

Cython:NumPy配列をオブジェクトに型キャストする必要があるのはなぜですか?

分類Dev

Vueのオブジェクトの配列からオブジェクトを削除するときの奇妙な動作

分類Dev

オブジェクトがキャンバスのt-rexの外に移動したときの奇妙な動作

分類Dev

配列型キーに基づいてオブジェクトの配列をグループ化します

分類Dev

チャートを作成するために、オブジェクトの配列をネストされた配列の配列に変換します

分類Dev

オブジェクトの初期化後にC ++でchar配列を表示する際の異常な動作

分類Dev

バニラJS /キャンバスヘビゲームでヘビの動きのために配列の最後のオブジェクトを取得して前面に移動しようとしています

分類Dev

配列jsオブジェクトのスキャン

分類Dev

このオブジェクトをこの静的配列に追加する奇妙な動作

分類Dev

int(プリミティブ型)配列から整数(オブジェクト型)配列へのキャスト

分類Dev

配列にプッシュされたオブジェクトの予期しない動作

分類Dev

オブジェクトの配列を含むマングース作成レコード(配列へのキャストに失敗しました)

分類Dev

動的配列を使用したオブジェクトの作成

分類Dev

動的キーを使用したオブジェクトのネストされた配列の並べ替え

分類Dev

PHP匿名オブジェクトの文字列を連結する奇妙な動作

分類Dev

親を子にキャスト - 配列の奇妙な動作

分類Dev

オブジェクト配列から列挙で使用可能なそれぞれのクラスへの動的キャストオブジェクト

分類Dev

オブジェクト要素を配列int [] javaspringにキャストします

分類Dev

Object型のオブジェクトを配列にダウンキャストする方法は?

分類Dev

PHP次のような配列にキャストされたオブジェクトを作成する方法:(配列)カスタム関数を使用した$ object

Related 関連記事

  1. 1

    オブジェクトを配列にキャスト

  2. 2

    Java:オブジェクトを配列型にキャストする

  3. 3

    Javaでプリミティブ型配列をオブジェクト配列にキャストする

  4. 4

    オブジェクトの配列を目的のクラスの配列にキャストする

  5. 5

    オブジェクト配列をLong配列にキャストするときのClassCastException

  6. 6

    配列オブジェクトの中央/最初に挿入した後、配列オブジェクトのキーを変更します

  7. 7

    配列オブジェクトの中央/最初に挿入した後、配列オブジェクトのキーを変更します

  8. 8

    (配列)型キャスト奇妙な動作オブジェクトから配列への変換

  9. 9

    Ruby:配列内のオブジェクトを変換した後にキー/値を渡す

  10. 10

    Cython:NumPy配列をオブジェクトに型キャストする必要があるのはなぜですか?

  11. 11

    Vueのオブジェクトの配列からオブジェクトを削除するときの奇妙な動作

  12. 12

    オブジェクトがキャンバスのt-rexの外に移動したときの奇妙な動作

  13. 13

    配列型キーに基づいてオブジェクトの配列をグループ化します

  14. 14

    チャートを作成するために、オブジェクトの配列をネストされた配列の配列に変換します

  15. 15

    オブジェクトの初期化後にC ++でchar配列を表示する際の異常な動作

  16. 16

    バニラJS /キャンバスヘビゲームでヘビの動きのために配列の最後のオブジェクトを取得して前面に移動しようとしています

  17. 17

    配列jsオブジェクトのスキャン

  18. 18

    このオブジェクトをこの静的配列に追加する奇妙な動作

  19. 19

    int(プリミティブ型)配列から整数(オブジェクト型)配列へのキャスト

  20. 20

    配列にプッシュされたオブジェクトの予期しない動作

  21. 21

    オブジェクトの配列を含むマングース作成レコード(配列へのキャストに失敗しました)

  22. 22

    動的配列を使用したオブジェクトの作成

  23. 23

    動的キーを使用したオブジェクトのネストされた配列の並べ替え

  24. 24

    PHP匿名オブジェクトの文字列を連結する奇妙な動作

  25. 25

    親を子にキャスト - 配列の奇妙な動作

  26. 26

    オブジェクト配列から列挙で使用可能なそれぞれのクラスへの動的キャストオブジェクト

  27. 27

    オブジェクト要素を配列int [] javaspringにキャストします

  28. 28

    Object型のオブジェクトを配列にダウンキャストする方法は?

  29. 29

    PHP次のような配列にキャストされたオブジェクトを作成する方法:(配列)カスタム関数を使用した$ object

ホットタグ

アーカイブ