Немного строчек кода позволят обращаться к масссиву/объекту в стиле: ‘0.gz’
$ php -f /var/web/d.php
Result for key '1.gz0.1.aa.00': string(101) "То, что никогда не встретится в ваших массивах/объектах"
$ php -f /var/web/d.php
Result for key '1.gz0.1.aa': string(2) "bb"
$ php -f /var/web/d.php
Result for key '0.gz': array(2) { [0]=> string(5) "qeqwe" [1]=> string(6) "qeqeqe" }
silicoid
О май… Что это за индокод… если у вас в перемешку массивы и объекты то можете все преобразовать в массив и не заморачиваться $array = json_decode(json_encode($mixed),TRUE);
на выходе будет обычный ассоциативный массив. в случае ТС $array[0][‘gz’];
57.188987731934ms Result for key '557.0.gz.2': int(20)
0.051975250244141ms
57 миллисек это очень много, а еще и на memory_get_usage/memory_get_peak_usage любопытно было бы посмотреть. Ну, чтобы вывод о том кто индокодит
Вот это:
$array = json_decode(json_encode($mixed),TRUE);
зло. Никогда так не делайте
silicoid
Индокод, это когда пишут 50 строк, вместо того, чтоб написать одну. Понятно что прямое и обратное преобразование в json очень ресурсоемкая задача, НО как на входе, так и на выходе имеет стандартный синтаксис, а не какой-то придуманный именно вами и не используемый нигде более в языке.
Когда вы пишете какой-то код, надо еще и понимать, что за вами его будет кто-то разбирать, поэтому использование таких вот конструкций
1.gz0.1.aa.00
недопустимо
Marat_Kh
silicoid #:
стандартный синтаксис, а не какой-то придуманный именно вами и не используемый нигде более в языке.
Когда вы пишете какой-то код, надо еще и понимать, что за вами его будет кто-то разбирать, поэтому использование таких вот конструкций
недопустимо
Недопустимо кому? Это всего лишь функция, облегчающая доступ к элементам массива/объекта. Не более того. Всяких разных функции/классов в любом проекте может быть от много до очень много. И разбирать их приходится, хочется того или нет.
Что касается $array[0][‘gz’]
print($o['3a']); #PHP Notice: Undefined index: 3a in /var/web/d.php on line 21
А у меня бзик🤪 — все ошибки вызывают Exception, просто никаких варнинго-нотисов не люблю. И предпочитаю приложить немного усилий, чтобы исключить их
Marat_Kh
Marat_Kh #: А у меня бзик🤪 — все ошибки вызывают Exception,
Кстати, такой подход, позволяет с пониманием относиться к этому:
$ python3 Python 3.6.8 (default, Apr 22020, 13:34:55) [GCC 4.8.520150623 (Red Hat 4.8.5-39)] on linux Type "help", "copyright", "credits" or "license"for more information. >>> o={'sd':1} >>> print(o['dd']) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'dd' >>> print(o.get('dd')) None >>> print(o.get('dd',{})) {}
Sly32
Marat_Kh #:
Кстати, такой подход, позволяет с пониманием относиться к этому:
Ну так этоже пайтон, он же для людей) собственно под капотом get и есть обработка исключений при работе со словарями
Dram
Есть массив
Нужно обратиться к подмассиву [«gz»] и я вечно туплю в этом моменте, сначала пробую так
$json[0][«gz»]
не срабатывает (иногда в других случаях срабатывает), потом пробую так
Я забыл или не знал — как понять сразу что нужно писать скобки или стрелку?
SmartSEO
Marat_Kh
Нужно обратиться к подмассиву
Что то типа того:
Немного строчек кода позволят обращаться к масссиву/объекту в стиле: ‘0.gz’
silicoid
О май… Что это за индокод…
если у вас в перемешку массивы и объекты то можете все преобразовать в массив и не заморачиваться
$array = json_decode(json_encode($mixed),TRUE);
на выходе будет обычный ассоциативный массив.
в случае ТС $array[0][‘gz’];
Marat_Kh
$array = json_decode(json_encode($mixed),TRUE);
Категорически неверный подход: Прилетел 10000 таких:
$o = json_decode('[{"gz":["qeqwe","qeqeqe", 20]},{"gz0":["qeqwe",{"aa":"bb"}]}]');
$oo = [];
for($i=0;$i<10000;$i++){
$oo[$i] = $o;
}
$t = microtime(1);
$oo = json_decode(json_encode($oo),TRUE);
echo (microtime(1) - $t)*1000, 'ms';
$t = microtime(1);
$ns="557.0.gz.2";
echo "nResult for key '{$ns}': n", var_dump(_n($oo, $ns)), "n";
echo (microtime(1) - $t)*1000, 'ms', "n";
57 миллисек это очень много, а еще и на memory_get_usage/memory_get_peak_usage любопытно было бы посмотреть. Ну, чтобы вывод о том кто индокодит
Вот это:
зло. Никогда так не делайте
silicoid
Индокод, это когда пишут 50 строк, вместо того, чтоб написать одну.
Понятно что прямое и обратное преобразование в json очень ресурсоемкая задача, НО как на входе, так и на выходе имеет стандартный синтаксис, а не какой-то придуманный именно вами и не используемый нигде более в языке.
Когда вы пишете какой-то код, надо еще и понимать, что за вами его будет кто-то разбирать, поэтому использование таких вот конструкций
1.gz0.1.aa.00недопустимо
Marat_Kh
стандартный синтаксис, а не какой-то придуманный именно вами и не используемый нигде более в языке.
Когда вы пишете какой-то код, надо еще и понимать, что за вами его будет кто-то разбирать, поэтому использование таких вот конструкций
недопустимо
Недопустимо кому? Это всего лишь функция, облегчающая доступ к элементам массива/объекта. Не более того. Всяких разных функции/классов в любом проекте может быть от много до очень много. И разбирать их приходится, хочется того или нет.
Что касается $array[0][‘gz’]
А у меня бзик🤪 — все ошибки вызывают Exception, просто никаких варнинго-нотисов не люблю. И предпочитаю приложить немного усилий, чтобы исключить их
Marat_Kh
А у меня бзик🤪 — все ошибки вызывают Exception,
Кстати, такой подход, позволяет с пониманием относиться к этому:
Sly32
Кстати, такой подход, позволяет с пониманием относиться к этому:
Ну так этоже пайтон, он же для людей) собственно под капотом get и есть обработка исключений при работе со словарями
Nevep
$json[0]->gzТакой код должен быть в твоем случае.