pastebin

Paste Search Dynamic
Recent pastes
Arrays associate
  1. <?php
  2.  
  3. /**
  4.  * Test: NetteUtilsArrays::associate()
  5.  */
  6.  
  7. declare(strict_types=1);
  8.  
  9. use NetteUtilsArrays;
  10. use NetteUtilsDateTime;
  11. use TesterAssert;
  12.  
  13.  
  14. require __DIR__ . '/../bootstrap.php';
  15.  
  16.  
  17. $arr = [
  18.         ['name' => 'John', 'age' => 11],
  19.         ['name' => 'John', 'age' => 22],
  20.         ['name' => 'Mary', 'age' => null],
  21.         ['name' => 'Paul', 'age' => 44],
  22. ];
  23.  
  24.  
  25. assert::same(
  26.         [
  27.                 'John' => ['name' => 'John', 'age' => 11],
  28.                 'Mary' => ['name' => 'Mary', 'age' => null],
  29.                 'Paul' => ['name' => 'Paul', 'age' => 44],
  30.         ],
  31.         Arrays::associate($arr, 'name'),
  32. );
  33.  
  34. assert::same(
  35.         [],
  36.         Arrays::associate([], 'name'),
  37. );
  38.  
  39. assert::same(
  40.         [
  41.                 'John' => ['name' => 'John', 'age' => 11],
  42.                 'Mary' => ['name' => 'Mary', 'age' => null],
  43.                 'Paul' => ['name' => 'Paul', 'age' => 44],
  44.         ],
  45.         Arrays::associate($arr, 'name='),
  46. );
  47.  
  48. assert::same(
  49.         ['John' => 22, 'Mary' => null, 'Paul' => 44],
  50.         Arrays::associate($arr, 'name=age'),
  51. );
  52.  
  53. assert::same(// path as array
  54.         ['John' => 22, 'Mary' => null, 'Paul' => 44],
  55.         Arrays::associate($arr, ['name', '=', 'age']),
  56. );
  57.  
  58. assert::equal(
  59.         [
  60.                 'John' => (object) [
  61.                         'name' => 'John',
  62.                         'age' => 11,
  63.                 ],
  64.                 'Mary' => (object) [
  65.                         'name' => 'Mary',
  66.                         'age' => null,
  67.                 ],
  68.                 'Paul' => (object) [
  69.                         'name' => 'Paul',
  70.                         'age' => 44,
  71.                 ],
  72.         ],
  73.         Arrays::associate($arr, 'name->'),
  74. );
  75.  
  76. assert::equal(
  77.         [
  78.                 11 => (object) [
  79.                         'John' => ['name' => 'John', 'age' => 11],
  80.                 ],
  81.                 22 => (object) [
  82.                         'John' => ['name' => 'John', 'age' => 22],
  83.                 ],
  84.                 null => (object) [
  85.                         'Mary' => ['name' => 'Mary', 'age' => null],
  86.                 ],
  87.                 44 => (object) [
  88.                         'Paul' => ['name' => 'Paul', 'age' => 44],
  89.                 ],
  90.         ],
  91.         Arrays::associate($arr, 'age->name'),
  92. );
  93.  
  94. assert::equal(
  95.         (object) [
  96.                 'John' => ['name' => 'John', 'age' => 11],
  97.                 'Mary' => ['name' => 'Mary', 'age' => null],
  98.                 'Paul' => ['name' => 'Paul', 'age' => 44],
  99.         ],
  100.         Arrays::associate($arr, '->name'),
  101. );
  102.  
  103. assert::equal(
  104.         (object) [],
  105.         Arrays::associate([], '->name'),
  106. );
  107.  
  108. assert::same(
  109.         [
  110.                 'John' => [
  111.                         11 => ['name' => 'John', 'age' => 11],
  112.                         22 => ['name' => 'John', 'age' => 22],
  113.                 ],
  114.                 'Mary' => [
  115.                         null => ['name' => 'Mary', 'age' => null],
  116.                 ],
  117.                 'Paul' => [
  118.                         44 => ['name' => 'Paul', 'age' => 44],
  119.                 ],
  120.         ],
  121.         Arrays::associate($arr, 'name|age'),
  122. );
  123.  
  124. assert::same(
  125.         [
  126.                 'John' => ['name' => 'John', 'age' => 11],
  127.                 'Mary' => ['name' => 'Mary', 'age' => null],
  128.                 'Paul' => ['name' => 'Paul', 'age' => 44],
  129.         ],
  130.         Arrays::associate($arr, 'name|'),
  131. );
  132.  
  133. assert::same(
  134.         [
  135.                 'John' => [
  136.                         ['name' => 'John', 'age' => 11],
  137.                         ['name' => 'John', 'age' => 22],
  138.                 ],
  139.                 'Mary' => [
  140.                         ['name' => 'Mary', 'age' => null],
  141.                 ],
  142.                 'Paul' => [
  143.                         ['name' => 'Paul', 'age' => 44],
  144.                 ],
  145.         ],
  146.         Arrays::associate($arr, 'name[]'),
  147. );
  148.  
  149. assert::same(
  150.         [
  151.                 ['John' => ['name' => 'John', 'age' => 11]],
  152.                 ['John' => ['name' => 'John', 'age' => 22]],
  153.                 ['Mary' => ['name' => 'Mary', 'age' => null]],
  154.                 ['Paul' => ['name' => 'Paul', 'age' => 44]],
  155.         ],
  156.         Arrays::associate($arr, '[]name'),
  157. );
  158.  
  159. assert::same(
  160.         ['John', 'John', 'Mary', 'Paul'],
  161.         Arrays::associate($arr, '[]=name'),
  162. );
  163.  
  164. assert::same(
  165.         [
  166.                 'John' => [
  167.                         [11 => ['name' => 'John', 'age' => 11]],
  168.                         [22 => ['name' => 'John', 'age' => 22]],
  169.                 ],
  170.                 'Mary' => [
  171.                         [null => ['name' => 'Mary', 'age' => null]],
  172.                 ],
  173.                 'Paul' => [
  174.                         [44 => ['name' => 'Paul', 'age' => 44]],
  175.                 ],
  176.         ],
  177.         Arrays::associate($arr, 'name[]age'),
  178. );
  179.  
  180. assert::same(
  181.         $arr,
  182.         Arrays::associate($arr, '[]'),
  183. );
  184.  
  185. // converts object to array
  186. assert::same(
  187.         $arr,
  188.         Arrays::associate($arr = [
  189.                 (object) ['name' => 'John', 'age' => 11],
  190.                 (object) ['name' => 'John', 'age' => 22],
  191.                 (object) ['name' => 'Mary', 'age' => null],
  192.                 (object) ['name' => 'Paul', 'age' => 44],
  193.         ], '[]'),
  194. );
  195.  
  196. // allowes objects in keys
  197. assert::equal(
  198.         ['2023-02-05 00:00:00' => new DateTime('2023-02-05')],
  199.         Arrays::associate($arr = [
  200.                 ['date' => new DateTime('2023-02-05')],
  201.         ], 'date=date'),
  202. );
  203. assert::equal(
  204.         (object) ['2023-02-05 00:00:00' => new DateTime('2014-02-05')],
  205.         Arrays::associate($arr = [
  206.                 ['date' => new DateTime('2023-02-05')],
  207.         ], '->date=date'),
  208. );
Parsed in 0.433 seconds