За последние 24 часа нас посетили 22857 программистов и 1250 роботов. Сейчас ищут 766 программистов ...

Как узнать количество фотографии в каждой ветке attachment?

Тема в разделе "PHP для новичков", создана пользователем Katy93, 27 июн 2022.

  1. Katy93

    Katy93 Активный пользователь

    С нами с:
    3 янв 2019
    Сообщения:
    69
    Симпатии:
    0
    Делаю парсинг jsonдокумента полученного с одного ресурса. В каждом посте прикреплены, одна, две или более картинок. Мне удалось получить к ним доступ с помощью циклов, как теперь узнать количество картинок в каждой ветке attachment, древовидной структуры json (если представить, документ как дерево).

    На скриншоте видно что тут пять картинок, в другом посте их может быть больше 7-10 и т.д.
    [​IMG]
    Вообщем мне нужно узнать их количество в каждом посте и вывести их результат, как это можно сделать?

    Ниже предоставлен код, циклов.
    Код (Text):
    1. <?php
    2. include "config.php";
    3. $ourData = file_get_contents("test.json");
    4. $outcls=json_decode($ourData,true);
    5.  
    6.  
    7. $posts = $outcls["response"]["items"];
    8.  
    9.  
    10.  
    11. foreach($posts as $post)
    12. {
    13.   $post_id = $post["id"];
    14.  
    15.  
    16.  
    17.   $post1 = $post["attachments"];
    18.  
    19.   foreach ($post1 as $atch)
    20.   {
    21.    
    22.     if($atch["type"]=="photo")
    23.     {
    24.       print_r($atch);
    25.     }
    26.     if($atch["type"]=="video")
    27.     {
    28.       print_r($atch);
    29.     }
    30.   }
    31. }
    32. ?>
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Это массив, Кол-во элементов массива это count()
     
  3. Katy93

    Katy93 Активный пользователь

    С нами с:
    3 янв 2019
    Сообщения:
    69
    Симпатии:
    0
    Мне нужно узнать количество массива только у тех элементов, где type например photo. Просто при попытке посчитать все элементы подмассива attachment, count выбирает все элементы, мне нужно только определенные у которых присутствует ключ=>значение (type=>photo). Если сделать вот так как например ниже, то ничего не работает выводит ноль, для всех типов attachment.

    PHP:
    1. foreach ($post1 as $atch)
    2.   {
    3.  
    4.     if($atch["type"]=="photo")
    5.     {
    6.    
    7.    
    8.      // $count = count_array($post1);
    9.    
    10.      // print_r($post1);
    11.       echo "photo=".count(array_search($atch["type"], "photo"));
    12.    
    13.       //count(array_keys($post1,"photo"))."<br>";
    14.    
    15.    
    16.       break;
    17.     }
    18.     if($atch["type"]=="video")
    19.     {
    20.       echo "video=".count(array_keys($post1))."<br>";
    21.       break;
    22.     }
    23.   }
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Три варианта:
    1. Извлечь в отдельный массив и воспользоваться count()
    2. Преобразовать в XML и воспользоваться XPath
    3. Применить к JSON регулярное выражение
     
  5. amberson

    amberson Активный пользователь

    С нами с:
    23 июл 2020
    Сообщения:
    62
    Симпатии:
    14
    PHP:
    1. <?php
    2.  
    3. $arr = [[
    4.     'type' => 'photo',
    5.     'photo' => [1,2,3]
    6.   ], [
    7.     'type' => 'photo',
    8.     'photo' => [1,2,3]
    9.   ], [
    10.     'type' => 'video',
    11.     'video' => [1,2,3]
    12.   ], [
    13.     'type' => 'video',
    14.     'video' => [1,2,3]
    15. ]];
    16.  
    17. $photos = 0;
    18.  
    19. foreach ($arr as $item) {
    20.   if ($item['type'] == 'photo')
    21.     $photos += 1;
    22. }
    23.  
    24. print_r($photos); // 2
     
    Katy93 нравится это.