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

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

ホットタグ

アーカイブ