Size: a a a

2020 September 10

NO

Nex Otaku in Yii Framework 3
Сергей Предводителев
Проблема вся вот в такой ситуации:

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];

Разве очевидно, что getVaue($array, 'a.b.c') должен вернуть?
Мне кажется, что нет.
Если у тебя проблема именно с этим, то создавай новый issue и там описывай. А не приплетай в чужой issue. Хорошо? Будем решать отдельно, является ли это проблемой вообще. До тебя годами пользовались и никто не жаловался.
источник

СП

Сергей Предводителев... in Yii Framework 3
Nex Otaku
Если у тебя проблема именно с этим, то создавай новый issue и там описывай. А не приплетай в чужой issue. Хорошо? Будем решать отдельно, является ли это проблемой вообще. До тебя годами пользовались и никто не жаловался.
Его и создвли
источник

NO

Nex Otaku in Yii Framework 3
Нет, всё обсуждение по переделке идёт почему-то в #48
источник

СП

Сергей Предводителев... in Yii Framework 3
Про него и говорили
источник

NO

Nex Otaku in Yii Framework 3
Так. В общем залил PR https://github.com/yiisoft/arrays/pull/51

Там и исправление и тест на issue #48.

Я думаю это гораздо лучшее решение изначальной проблемы, чем перефигачивание всего хелпера.
источник

NO

Nex Otaku in Yii Framework 3
Сергей Предводителев
Проблема вся вот в такой ситуации:

$array = [
 'a.b' => ['c' => 1],
 'a' => ['b' => ['c' => 2]],
 'a' => ['b.c' => 3],
];

Разве очевидно, что getVaue($array, 'a.b.c') должен вернуть?
Мне кажется, что нет.
Во-первых, пример сильно оторван от жизни. Реального кейса нет.

Во-вторых, это не касается issue #48.

В-третьих, для сложных случаев, когда нужны одновременно точки и вложенность, используется путь в виде массива ключей.

1. Первое значение - точки + вложенность, используем массив ключей: getValue($array, ['a.b', 'c'])

2. Второе значение - просто вложенность, можем использовать путь массивом или дот-нотацией: getValue($array, ['a', 'b', 'c']); getValue($array, 'a.b.c'])

3. Третье значение - точки + вложенность, используем массив ключей: getValue($array, ['a', 'b.c'])

В документации описания такого кейса нет, но можно добавить.
источник

А

Алексей R in Yii Framework 3
Разделение по точке в современном коде кому-то нужно вообще?
источник

СП

Сергей Предводителев... in Yii Framework 3
Алексей R
Разделение по точке в современном коде кому-то нужно вообще?
в AR используется
источник

А

Алексей R in Yii Framework 3
Сергей Предводителев
в AR используется
Везде? Или можно на explode заменить?
источник

СП

Сергей Предводителев... in Yii Framework 3
Алексей R
Везде? Или можно на explode заменить?
там как-то сложно, это к Terabytesoftw , он в теме
источник

NO

Nex Otaku in Yii Framework 3
Алексей R
Разделение по точке в современном коде кому-то нужно вообще?
А Yii 3?
источник

Д

Дмитрий in Yii Framework 3
Алексей R
Разделение по точке в современном коде кому-то нужно вообще?
Это потенциально нужная штука. Например, для фильтрации филдов при апи запросов.
источник

А

Алексей R in Yii Framework 3
Дмитрий
Это потенциально нужная штука. Например, для фильтрации филдов при апи запросов.
Explodить вручную можно
источник

В

Виктор in Yii Framework 3
Nex Otaku
Так. В общем залил PR https://github.com/yiisoft/arrays/pull/51

Там и исправление и тест на issue #48.

Я думаю это гораздо лучшее решение изначальной проблемы, чем перефигачивание всего хелпера.
На первый взгляд код норм, но я не вникал глубоко пока. Один нюанс только откомментил там же.
источник

В

Виктор in Yii Framework 3
Я бы еще в тест добавил все кейсы, описанные топикстартером в issue 48, чтобы совсем малина была
источник

В

Виктор in Yii Framework 3
И ассертить не только результат getValue, но и массив после изменения.
источник

АН

Александр Некрасов... in Yii Framework 3
Виктор
На первый взгляд код норм, но я не вникал глубоко пока. Один нюанс только откомментил там же.
array_key_exists не deprecated, только работа с объектом
источник

NO

Nex Otaku in Yii Framework 3
Алексей R
Explodить вручную можно
Так-то всё вручную можно, на то и хелпер чтобы вручную не делать )
источник

NO

Nex Otaku in Yii Framework 3
Виктор
И ассертить не только результат getValue, но и массив после изменения.
Ты имеешь в виду извлечь из массива напрямую?
источник

В

Виктор in Yii Framework 3
Nex Otaku
Ты имеешь в виду извлечь из массива напрямую?
Что-то вроде такого (написал на коленке):
$array = ['a.b.c' => 'old'];
$this->assertEquals('old', ArrayHelper::getValue($array, 'a.b.c'));
ArrayHelper::setValue($array, 'a.b.c', 'new');
$this->assertEquals('new', ArrayHelper::getValue($array, 'a.b.c'));
$this->assertEquals(['a.b.c' => 'new'], $array);
источник