|
Возможно ли сократить такую запись | ☑ | ||
---|---|---|---|---|
0
Александр Тоха
14.09.18
✎
17:18
|
как правильно перебрать такой массив, что бы в итоге получить значения нумератора...я немного в ступоре, никогда не наблюдал столько вложений.
$resData['catInfo']['children'][0]['event']['mainMarket']['selections']['Result.3']['count']['price']['numerator']; Подскажите, помогите. |
|||
1
Доктор Кто
14.09.18
✎
18:59
|
(0) $resData.catInfo.children[0].event.mainMarket.selections.['Result.3'].count.price.numerator;
только если так. Можно еще с промежуточными перемпнными, но это для удобства, а не сокращение. |
|||
2
Asmody
14.09.18
✎
19:34
|
JSON разбираешь?
А теперь представь, что в этой цепочке какого-то значения нет. |
|||
3
Asmody
14.09.18
✎
19:36
|
В lodash для таких случаев есть функция _.get()
|
|||
4
Доктор Кто
14.09.18
✎
19:53
|
(0) О, есть один вариантик. Записать все ключи в массив:
const keys = ['catInfo', 'children', и т.д.]; потом сделать цикл по этому массиву, и вытащить по очереди значения: const numerator = keys.reduce((acc, key) => acc[key], $resData) В цикле уже можешь вставить любые проверки на существование такого элемента. |
|||
5
Доктор Кто
14.09.18
✎
19:54
|
['catInfo']['children'] - это как я понимаю информация о детях кошки )))
|
|||
6
Доктор Манхэттен
16.09.18
✎
14:03
|
Более полный вариант с проверкой:
const get = (p, o) => p.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, o); const numerator = get(['catInfo', 'children', и т.д.], $resData); |
|||
7
Доктор Манхэттен
16.09.18
✎
14:11
|
Можно сделать отдельно функцию для получения нумератора:
const get = p => o => p.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, o); const getNumerator = get(['catInfo', 'children', 0, и т.д.]); А потом ее вызывать передавая только $resData, но не передавая каждый раз путь: const numerator = getNumerator($resData); |
|||
8
Александр Тоха
16.09.18
✎
18:10
|
(7) спасибо, но почему то перебором быстрее получается ( может баг (
|
|||
9
Доктор Манхэттен
17.09.18
✎
12:40
|
(8) Что значит перебором? На чем пишешь?
|
|||
10
Александр Тоха
17.09.18
✎
17:15
|
(9) постигаю все прелести функционального подхода на PHP и чуть-чуть ЖС, а до этого писал только на Autoit и Pawn )но это совсем другая история)
|
|||
11
Asmody
17.09.18
✎
17:42
|
(10) "прелести функционального подхода на PHP" - это изврат. Обязательно упрешься в язык. Хотя, чтобы это понять нужно самому реализовать простую монаду. И сразу станет понятно, что в традиционном ключе всё можно сделать проще.
А вот с javascript всё не так однозначно. Он позволяет писать достаточно выразительно в fp-стиле. |
|||
12
Александр Тоха
17.09.18
✎
17:52
|
(11) устал от "бесконечных" ifов/switch и forов) хочется просто написать array_map вызвать обратную и вот ) да и нужно развивать себя,а то всё автокликалки пиксельпоиски. Благо сейчас живем в эпоху космических коммуникаций и всегда можно спросить у знающих, обидно одно-цены на чтиво очень кусаются
|
|||
13
Asmody
17.09.18
✎
18:03
|
Вот как-то так
<?php function array_get_path($arr, $path) { $reducer = function($carry, $item) { //if (is_null($carry)) return null; if (is_array($carry) && array_key_exists($item, $carry)) { return $carry[$item]; } return null; }; return array_reduce($path, $reducer, $arr); } вот так использовать: array_get_path($resData, ['catInfo', 'children', 0, 'event', 'mainMarket', 'selections', 'Result.3', 'count', 'price', 'numerator']); |
|||
14
Сияющий в темноте
17.09.18
✎
18:39
|
Если у вас длинный путь вложенности массива,то как ни крути,его придется пройти,или,как вариант,менять создателя,чтобы путь был не таким уж и длинным.
|
|||
15
Вафель
17.09.18
✎
18:40
|
а откуда данные? может xpath какой там есть?
|
|||
16
Asmody
17.09.18
✎
22:04
|
(15) Это как пить дать результат json_decode($res, true). Нет там никакого xpath.
Кстати, в php есть чудесный символ @ - подавление ошибок в выражении. Специально для ленивых программистов. http://php.net/manual/ru/language.operators.errorcontrol.php Но злоупотреблять ею не стоит. |
|||
17
Александр Тоха
18.09.18
✎
15:55
|
(16) Добрый день) Для себя открыл НЕЧТО - массив данных в пхп передается полностью...а не по ссылке, а как же тогда быть с большим массивом эдак в мульйон. Это получается, что при каждом использовании функций будет создана копия массива в памяти. Знатоки подсобите куда смотреть.
|
|||
18
Доктор Манхэттен
18.09.18
✎
16:06
|
(17) Лучше брось этот ПХП пока не поздно.
Если очень хочется, можно передавать переменные по ссылке, если при объявлении функции указать какие аргументы передаются по ссылке. Нужно поставить знак & перед именем аргумента, вот так: function foo(&$myArray) { тут тело функции } |
|||
19
Asmody
18.09.18
✎
16:09
|
||||
20
Вафель
18.09.18
✎
16:10
|
а как же
Начиная с PHP 5.4.0 передача переменной по ссылке стала невозможна, поэтому использование этого приема приведет к фатальной ошибке |
|||
21
Asmody
18.09.18
✎
16:18
|
(20) Это не совсем корректный перевод. Имеется ввиду, что не нужно явно брать ссылку от переменной вида &$var при вызове функции. PHP сам разберется как передавать переменную в зависимости от того, как были объявлены параметры функции.
|
|||
22
Александр Тоха
18.09.18
✎
16:27
|
(21) я понял, что придется писать свои функции по работе с массивом, т.к. в ряде стандартных функций создается копия массива...печально
|
|||
23
Asmody
18.09.18
✎
16:35
|
(22) Насчет встроенных функций можно особо не заморачиваться. Там php сам "магически" разруливает.
|
|||
24
Доктор Манхэттен
18.09.18
✎
17:38
|
(22) Таки почему ты не хочешь уйти с PHP на более правильный или высокооплачиваемый язык? Как я понял, тебе пока нечего терять, не накопил опыта в PHP чтобы держаться за него зубами.
|
|||
25
Александр Тоха
18.09.18
✎
18:35
|
(24) я "бонусхантер" уже как 4 кода и мне приходится самому организовывать себе самому автоматизацию рабочих процессов из-за невозможности организовать автоматизацию на стороне. Ну как только встает вопрос масштабируемости приходится учить какой либо скриптовый язык(autoit, pawn). Сейчас мне нужна серверная часть и выбор пал на ПХП из-за низкого порога вхождения. Почти всю функционалку я могу реализовать на автоите, но там все упрется в скорость...Склоняю себя так же в сторону JS т.к. для меня js понятнее чем пхп, но устанавливать ноду и тыкать в нее палкой нет желания. Сразу хочу предупредить вопрос, насчет заплати, доверься специалистам - мой покерный бот для старзов написанный автоите был успешно портирован на C# и успешно слит в сеть.
|
|||
26
Александр Тоха
18.09.18
✎
18:46
|
*года
|
|||
27
Доктор Манхэттен
18.09.18
✎
19:15
|
(25) Какие проблемы с нодой? JS гораздо приятнее чем PHP.
Если нужен более низкий порог вхождения, то лучше выбрать Go. Я бы на твоем месте выбрал JS, меньше бы тратил время на ковыряние в PHP. |
|||
28
Александр Тоха
18.09.18
✎
19:29
|
(27) в чем преимущество node.js перед пхп ?
|
|||
29
Александр Тоха
18.09.18
✎
19:30
|
(27) конкретно в моей задаче, парсить/анализировать/ обрабатывать и отдавать на клиент
|
|||
30
Asmody
18.09.18
✎
19:52
|
(29) Вообще, парсинг парсингу рознь. Почему не Perl? Вот уж кто всем парсерам парсер.
Но лучше python или go. |
|||
31
Сияющий в темноте
18.09.18
✎
20:50
|
А что мы вообще парсим?
может,задачу изначально нужно решать по другому. php нормально работает с массивами,только нужно понимать,что многомерные массивы,это обьект в обьекте и все равно будет не быстро. |
|||
32
Доктор Манхэттен
18.09.18
✎
21:21
|
(28) JS проще и логичнее чем PHP, и ты его уже знаещь. Экономия времени на понимание. Я уже писал.
|
|||
33
Александр Тоха
20.09.18
✎
23:15
|
(31) изначально по другому не получится.
|
|||
34
Александр Тоха
20.09.18
✎
23:15
|
(30) Вот очень много читал про python, но все так и не решаюсь опробовать его в деле. Думаете будет профитнее php в парсинге?
|
|||
35
Asmody
21.09.18
✎
00:00
|
(34) Смотря что парсить. Иногда можно парсить и без программирования https://netology.ru/blog/directgoogledocs
|
|||
36
Александр Тоха
21.09.18
✎
00:13
|
(35) да не, мне надо дергать большой объем данных такой способ точно не подходит, да и затыка у меня только с бритами...но все же думаю почитать про python уж много хвалебных отзывов о нем
|
|||
37
Доктор Манхэттен
21.09.18
✎
00:47
|
(34) Питон лучше чем ПХП, это верно тебе сказали. Жаваскрипт тоже лучше.
А сколько дохода тебе приносит твое дело? Я похожим занимаюсь, только в другом направлении. |
|||
38
Александр Тоха
21.09.18
✎
00:53
|
(37) ну достаточно дохода.
|
|||
39
Доктор Манхэттен
21.09.18
✎
19:09
|
(38) Достаточно для чего? Как прибавка к основной работе? Или можно без напряга больше не работать, жить с родителями, и раз в год покупать себе оперативку для компа? Или достаточно чтобы путешествовать по Австралии на самолете?
Слишком неопределенное понятие. |
|||
40
Александр Тоха
23.09.18
✎
16:17
|
(39) это и есть моя работа, отнимающая 10-12 часов в сутки. А доход достаточный для моих потребностей.
|
|||
41
Доктор Манхэттен
23.09.18
✎
16:19
|
(40) Понятненько. Но какие у тебя потребности примерно?
от 50 до 100 тысяч в месяц приносит доход? Или больше 100? Или меньше 50? Не стесняйся, тут все свои, каждый может поделиться своими доходами, налоговая ничего не узнает ))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |