Делаю парсинг jsonдокумента полученного с одного ресурса. В каждом посте прикреплены, одна, две или более картинок. Мне удалось получить к ним доступ с помощью циклов, как теперь узнать количество картинок в каждой ветке attachment, древовидной структуры json (если представить, документ как дерево). На скриншоте видно что тут пять картинок, в другом посте их может быть больше 7-10 и т.д. Вообщем мне нужно узнать их количество в каждом посте и вывести их результат, как это можно сделать? Ниже предоставлен код, циклов. Код (Text): <?php include "config.php"; $ourData = file_get_contents("test.json"); $outcls=json_decode($ourData,true); $posts = $outcls["response"]["items"]; foreach($posts as $post) { $post_id = $post["id"]; $post1 = $post["attachments"]; foreach ($post1 as $atch) { if($atch["type"]=="photo") { print_r($atch); } if($atch["type"]=="video") { print_r($atch); } } } ?>
Мне нужно узнать количество массива только у тех элементов, где type например photo. Просто при попытке посчитать все элементы подмассива attachment, count выбирает все элементы, мне нужно только определенные у которых присутствует ключ=>значение (type=>photo). Если сделать вот так как например ниже, то ничего не работает выводит ноль, для всех типов attachment. PHP: foreach ($post1 as $atch) { if($atch["type"]=="photo") { // $count = count_array($post1); // print_r($post1); echo "photo=".count(array_search($atch["type"], "photo")); //count(array_keys($post1,"photo"))."<br>"; break; } if($atch["type"]=="video") { echo "video=".count(array_keys($post1))."<br>"; break; } }
Три варианта: 1. Извлечь в отдельный массив и воспользоваться count() 2. Преобразовать в XML и воспользоваться XPath 3. Применить к JSON регулярное выражение
PHP: <?php $arr = [[ 'type' => 'photo', 'photo' => [1,2,3] ], [ 'type' => 'photo', 'photo' => [1,2,3] ], [ 'type' => 'video', 'video' => [1,2,3] ], [ 'type' => 'video', 'video' => [1,2,3] ]]; $photos = 0; foreach ($arr as $item) { if ($item['type'] == 'photo') $photos += 1; } print_r($photos); // 2