public function test_merge_recursive() { $arr1 = ['key1' => 'will be rewrite to array', 'key2' => ['will be', 'rewrite to', 'k2' => 'string'], 'key3' => ['k3' => 'sub', 'k4' => 'array', 1, 2], 'nums' => [1 => 14, 3 => 32, 5 => 53], 'key4' => 'unique value']; $arr2 = ['key1' => ['str', 'rewrite with', 'new value'], 'key2' => 'array rewrite to a new string', 'key3' => ['k3' => 'new sub', 'k5' => 'here', 3, 4], 'nums' => [0 => 4, 2 => 27, 4 => 46]]; $arr = Arrays::merge_recursive($arr1, $arr2, false); $expect = ['key1' => ['str', 'rewrite with', 'new value'], 'key2' => 'array rewrite to a new string', 'key3' => ['k3' => 'new sub', 'k4' => 'array', 0 => 1, 1 => 2, 'k5' => 'here', 2 => 3, 3 => 4], 'nums' => [1 => 14, 3 => 32, 5 => 53, 6 => 4, 7 => 27, 8 => 46], 'key4' => 'unique value']; $this->assertEquals($expect, $arr, 'Рекурсивное объединение массивов. Не сохраняем числовые ключи.'); $arr = Arrays::merge_recursive($arr1, $arr2, true); $expect = ['key1' => ['str', 'rewrite with', 'new value'], 'key2' => 'array rewrite to a new string', 'key3' => ['k3' => 'new sub', 'k4' => 'array', 0 => 3, 1 => 4, 'k5' => 'here'], 'nums' => [1 => 14, 3 => 32, 5 => 53, 0 => 4, 2 => 27, 4 => 46], 'key4' => 'unique value']; $this->assertEquals($expect, $arr, 'Рекурсивное объединение массивов. Сохраняем числовые ключи.'); }
/** * Свое значение в массив валидированных данных. * * Если значение нужно разместить в многоуровневом массиве, пишем всю вложенность ключей и новое значение на нужном * уровне. Старое значение будет переписано, если оно есть. * * Наличие поля не проверяется, что дает больше возможностей для управления массивом итоговых данных. * * @todo это плохо или хорошо? С одной стороны, можно добавить что-то после валидации, например, спец.данные, * нужные программисту. С другой же стороны, ошибка кодера в имени поля может оказаться незамеченной. * * @param array $value ключ => начение */ public function setValue($value) { $this->values = Arrays::merge_recursive($this->values, $value); }