<?php
/**
* Test: NetteUtilsArrays::associate()
*/
declare(strict_types=1);
use NetteUtilsArrays;
use NetteUtilsDateTime;
use TesterAssert;
require __DIR__ . '/../bootstrap.php';
$arr = [
['name' => 'John', 'age' => 11],
['name' => 'John', 'age' => 22],
['name' => 'Mary', 'age' => null],
['name' => 'Paul', 'age' => 44],
];
[
'John' => ['name' => 'John', 'age' => 11],
'Mary' => ['name' => 'Mary', 'age' => null],
'Paul' => ['name' => 'Paul', 'age' => 44],
],
Arrays::associate($arr, 'name'),
);
[],
Arrays::associate([], 'name'),
);
[
'John' => ['name' => 'John', 'age' => 11],
'Mary' => ['name' => 'Mary', 'age' => null],
'Paul' => ['name' => 'Paul', 'age' => 44],
],
Arrays::associate($arr, 'name='),
);
['John' => 22, 'Mary' => null, 'Paul' => 44],
Arrays::associate($arr, 'name=age'),
);
['John' => 22, 'Mary' => null, 'Paul' => 44],
Arrays::associate($arr, ['name', '=', 'age']),
);
[
'John' => (object) [
'name' => 'John',
'age' => 11,
],
'Mary' => (object) [
'name' => 'Mary',
'age' => null,
],
'Paul' => (object) [
'name' => 'Paul',
'age' => 44,
],
],
Arrays::associate($arr, 'name->'),
);
[
11 => (object) [
'John' => ['name' => 'John', 'age' => 11],
],
22 => (object) [
'John' => ['name' => 'John', 'age' => 22],
],
null => (object) [
'Mary' => ['name' => 'Mary', 'age' => null],
],
44 => (object) [
'Paul' => ['name' => 'Paul', 'age' => 44],
],
],
Arrays::associate($arr, 'age->name'),
);
(object) [
'John' => ['name' => 'John', 'age' => 11],
'Mary' => ['name' => 'Mary', 'age' => null],
'Paul' => ['name' => 'Paul', 'age' => 44],
],
Arrays::associate($arr, '->name'),
);
(object) [],
Arrays::associate([], '->name'),
);
[
'John' => [
11 => ['name' => 'John', 'age' => 11],
22 => ['name' => 'John', 'age' => 22],
],
'Mary' => [
null => ['name' => 'Mary', 'age' => null],
],
'Paul' => [
44 => ['name' => 'Paul', 'age' => 44],
],
],
Arrays::associate($arr, 'name|age'),
);
[
'John' => ['name' => 'John', 'age' => 11],
'Mary' => ['name' => 'Mary', 'age' => null],
'Paul' => ['name' => 'Paul', 'age' => 44],
],
Arrays::associate($arr, 'name|'),
);
[
'John' => [
['name' => 'John', 'age' => 11],
['name' => 'John', 'age' => 22],
],
'Mary' => [
['name' => 'Mary', 'age' => null],
],
'Paul' => [
['name' => 'Paul', 'age' => 44],
],
],
Arrays::associate($arr, 'name[]'),
);
[
['John' => ['name' => 'John', 'age' => 11]],
['John' => ['name' => 'John', 'age' => 22]],
['Mary' => ['name' => 'Mary', 'age' => null]],
['Paul' => ['name' => 'Paul', 'age' => 44]],
],
Arrays::associate($arr, '[]name'),
);
['John', 'John', 'Mary', 'Paul'],
Arrays::associate($arr, '[]=name'),
);
[
'John' => [
[11 => ['name' => 'John', 'age' => 11]],
[22 => ['name' => 'John', 'age' => 22]],
],
'Mary' => [
[null => ['name' => 'Mary', 'age' => null]],
],
'Paul' => [
[44 => ['name' => 'Paul', 'age' => 44]],
],
],
Arrays::associate($arr, 'name[]age'),
);
$arr,
Arrays::associate($arr, '[]'),
);
// converts object to array
$arr,
Arrays::associate($arr = [
(object) ['name' => 'John', 'age' => 11],
(object) ['name' => 'John', 'age' => 22],
(object) ['name' => 'Mary', 'age' => null],
(object) ['name' => 'Paul', 'age' => 44],
], '[]'),
);
// allowes objects in keys
['2023-02-05 00:00:00' => new DateTime('2023-02-05')],
Arrays::associate($arr = [
['date' => new DateTime('2023-02-05')],
], 'date=date'),
);
(object) ['2023-02-05 00:00:00' => new DateTime('2014-02-05')],
Arrays::associate($arr = [
['date' => new DateTime('2023-02-05')],
], '->date=date'),
);