string_keys.phpt 983 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. --TEST--
  2. Array unpacking with string keys
  3. --FILE--
  4. <?php
  5. // Works with both arrays and Traversables.
  6. $array = [1, 2, "foo" => 3, 4];
  7. var_dump([...$array]);
  8. $iterator = new ArrayIterator([1, 2, "foo" => 3, 4]);
  9. var_dump([...$iterator]);
  10. // Test overwriting behavior.
  11. $array1 = ["foo" => 1];
  12. $array2 = ["foo" => 2];
  13. var_dump(["foo" => 0, ...$array1, ...$array2]);
  14. var_dump(["foo" => 0, ...$array1, ...$array2, "foo" => 3]);
  15. // Test numeric string key from iterator.
  16. function gen() {
  17. yield "42" => 42;
  18. }
  19. var_dump([...gen()]);
  20. // Same as previous, but with refcounted string.
  21. function gen2() {
  22. $foo = "2";
  23. yield "4" . $foo => 42;
  24. }
  25. var_dump([...gen2()]);
  26. ?>
  27. --EXPECT--
  28. array(4) {
  29. [0]=>
  30. int(1)
  31. [1]=>
  32. int(2)
  33. ["foo"]=>
  34. int(3)
  35. [2]=>
  36. int(4)
  37. }
  38. array(4) {
  39. [0]=>
  40. int(1)
  41. [1]=>
  42. int(2)
  43. ["foo"]=>
  44. int(3)
  45. [2]=>
  46. int(4)
  47. }
  48. array(1) {
  49. ["foo"]=>
  50. int(2)
  51. }
  52. array(1) {
  53. ["foo"]=>
  54. int(3)
  55. }
  56. array(1) {
  57. [0]=>
  58. int(42)
  59. }
  60. array(1) {
  61. [0]=>
  62. int(42)
  63. }