Помощь в массивах

1.54K
.

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

* (+/-)
<?php

$broadcast = file_get_contents('broadcast.json');
$schedule = file_get_contents('schedule.json');

$arrBroadcast = json_decode($broadcast, true);
$arrSchedule = json_decode($schedule, true);

// Ключ, по которому надо найти значения в broadcast.json
$needBroadcast = array('title');

// Ключи, по которым надо найти значения в schedule.json
$needSchedule = array('title', 'time', 'descr');

$Broadcast = getArray($arrBroadcast, $needBroadcast);
$Schedule = getArray($arrSchedule, $needSchedule);

echo '<pre>'; var_dump($Broadcast, $Schedule); echo '</pre>';



function getArray($arr, $keys, &$out = array()) {
    array_walk($arr, function ($i, $k) use ($keys, &$out) {
        if (is_array($i)) {
            getArray($i, $keys, $out);
        } elseif (in_array($k, $keys) && strripos($i, '.jpg') === false) {
            $out[] = $i;
        }
    });
    
    return $out;
}
.
Ей 25

ДоХтор, так а она работает? Если да, то что ему тогда надо?

.
# ValekS (13.08.2017 / 00:24)
ДоХтор, так а она работает? Если да, то что ему тогда надо?
Да, конечно работает. Зачем бы я её скидывал, гг... А вот что ему надо, я до конца понять не смог. Всё что я смог понять, так это поиск во многомерном массиве значений по нескольким ключам. Для этого и написал функцию. Но вроде бы это ещё не всё
.

ValekS, и ещё -- у него пхп версии меньше 5.4, сокращённый синтаксис объявления массивов не используй.

.
primalmz
Добавлено: 13.08.2017 / 00:36
Я наверно не могу правильно обьяснит.
Вот я создаю парсинг тв программы.
Сперва парсил schedule.json всё ок проблем нет,но разработчик сайта чуть хитрожопый
есть места в файле там где отсутствует title, title для этих мест берется из другого broadcast.json.
Вот вместо title в файле стоит ключ broadcast который совпадает с _id этого broadcast.json файла.
Вот title берется из этого _id.

Добавлено: 13.08.2017 / 00:37
Теперь мне нужно типо делать так если broadcast == _id то echo title
Но проблема в том что как мне тут : echo title вводит title именно определенного _id

Добавлено: 13.08.2017 / 00:42
То есть код должен искать значение title из broadcast.json который совпадает с значением broadcast , файла schedule.json
.
Ей 25

Да уж, жосско. Объемные файлы и структура файлов какая то кривая. Вот это ИД должно быть индексом вот этих всех массивов с title и остальной инфой. Тогда бы все было легко и просто. А так... Это очень много ресурсов сервера надо использовать.
Я бы в начале распарсил в начале вот этот broadcast.json - собрал бы в отдельный файл пары "_id => индекс массива в котором лежит этот ИД" или же сразу(да так даже и проще) "_id => title" (и все остальные поля которые могут понадобиться). Конечно это тоже трудоемкий процесс. Но зато потом проблем не будет. Мы один раз потратимся и все. А не будем каждый раз это делать.
А еще я хочу сказать что для больших объемов данных лучше xml использовать, а не json. Дело в том что для хмл в пхп есть крутая фишка - построчное считывание(не весь файл грузится в память, а по небольшим частям). Т.Е. пхп даже гиговые хмл файлы схавает и не подавится. А вот на счет того что такое есть и для жсон я не уверен. Скорее всего нет.

.
(\/)____o_O____(\/)

ValekS, xml может чуть более запутанным быть, в пхп7 есть http://php.net/manual/ru/langu ... w.php

.
ДокторДум

Заюзай библиотеку phpquery...

.

есть массив, допустим
$a['xxx'][0]=6
$a['xxx'][1]=3
$a['xxx'][5]=3
$a['yyy'][1]=2
мне нужно удалить $a['yyy'][1] , удаляю так unset($a['yyy'][1])
но при просмотре например через print_r($a) видно что [yyy] хоть и пустое , но есть.
как полностью удалить [yyy] если оно было последнее?

.
(\/)____o_O____(\/)

Ну так удаляй без индекса

Всего: 25