Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.04.2015
Сообщений: 3

Вывод по условию из многомерного массива

12.04.2015, 00:15. Показов 3034. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, форумчане!
Нуждаюсь в подсказке по работе с циклом foreach для разбора многомерного массива по условию.
Имеется 2 многомерных массива которые я декодирую с формата JSON ф-цией json_decode(). Я покажу данные в JSON и после обработки через json_decode(). Массив вывожу print_r ();
Первый массив такого вида:
JSON

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
    "result": {
        "items": [{
                "id": 2008542462,
                "original_id": 1057898213,
                "defindex": 617,
                "level": 10,
                "quality": 6,
                "inventory": 2147483947,
                "quantity": 1,
                "origin": 0,
                "style": 1,
                "attributes": [
                    {
                        "defindex": 142,
                        "value": 1265087803,
                        "float_value": 15185211
                    },
                    {
                        "defindex": 261,
                        "value": 1265087803,
                        "float_value": 15185211
                    },
                    {
                        "defindex": 292,
                        "value": 1115684864,
                        "float_value": 64
                    },
                    {
                        "defindex": 388,
                        "value": 1115684864,
                        "float_value": 64
                    }
                ]
                
            }
]
        
    }
}

После декодирования
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Array ( [result] => Array ( 
 
[items] => Array (
 
[65] => Array ( 
 
  [id] => 2008542462 
  [original_id] => 1057898213 
  [defindex] => 617 
  [level] => 10 
  [quality] => 6 
  [inventory] => 2147483947 
  [quantity] => 1 
  [origin] => 0 
  [style] => 1 
 
[attributes] => Array ( 
     [0] => Array ( 
       [defindex] => 142 
       [value] => 1265087803 
       [float_value] => 15185211 
     ) 
     [1] => Array ( 
       [defindex] => 261 
       [value] => 1265087803 
       [float_value] => 15185211 
     ) 
     [2] => Array (
       [defindex] => 292
       [value] => 1115684864 
       [float_value] => 64 
     ) 
     [3] => Array ( 
       [defindex] => 388 
       [value] => 1115684864 
       [float_value] => 64 
     ) 
)
)
)
)
)


Второй массив такого вида:
JSON

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
    "result": {
"items": [
{
                "name": "Paint Can 11",
                "defindex": 5037,
                "item_class": "tool",
                "item_type_name": "Tool",
                "item_name": "Gold",
                "item_description": "Used to paint other items.",
                "proper_name": false,
                "model_player": null,
                "item_quality": 6,
                "image_inventory": "backpack/player/items/crafting/paintcan",
                "min_ilevel": 5,
                "max_ilevel": 5,
                "image_url": "/icons/paintcan.9046edf23b64960a4084dad29d05d2c902feec78.png",
                "image_url_large": "/icons/paintcan_large.b8e71a4720fa96d963f45db61c013185ca637aa6.png",
                "craft_class": "tool",
                "craft_material_type": "tool",
                "capabilities": {
                    "can_craft_mark": true,
                    "can_be_restored": true,
                    "strange_parts": true,
                    "can_card_upgrade": true,
                    "can_strangify": true,
                    "can_killstreakify": true,
                    "can_consume": true
                },
                "tool": {
                    "type": "paint_can",
                    "usage_capabilities": {
                        "paintable": true
                    }
                },
                "used_by_classes": [
 
                ]
                ,
                "attributes": [
                    {
                        "name": "set item tint RGB",
                        "class": "set_item_tint_rgb",
                        "value": 15185211
                    }
                ]
                
            }
]
}
}

После декодирования
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[1196] => Array ( 
   [name] => Paint Can 11 
   [defindex] => 5037 
   [item_class] => tool 
   [item_type_name] => Инструмент 
   [item_name] => Золотой австралий 
   [item_description] => Применяется для окрашивания предметов. 
   [proper_name] => [model_player] => [item_quality] => 6 
   [image_inventory] => backpack/player/items/crafting/paintcan 
   [min_ilevel] => 5 
   [max_ilevel] => 5 
   [image_url] => /icons/paintcan.9046edf23b64960a4084dad29d05d2c902feec78.png 
   [image_url_large] => /icons/paintcan_large.b8e71a4720fa96d963f45db61c013185ca637aa6.png 
   [craft_class] => tool 
   [craft_material_type] => tool 
 
    [capabilities] => Array ( 
         [can_craft_mark] => 1 
         [can_be_restored] => 1 
         [strange_parts] => 1 
         [can_card_upgrade] => 1 
         [can_strangify] => 1 
         [can_killstreakify] => 1 
         [can_consume] => 1
     ) 
    [tool] => Array ( 
         [type] => paint_can 
      [usage_capabilities] => Array ( 
         [paintable] => 1 
       ) 
     ) 
 
    [used_by_classes] => Array ( )
 
    [attributes] => Array ( 
      [0] => Array ( 
         [name] => set item tint RGB 
         [class] => set_item_tint_rgb 
         [value] => 15185211 
       ) 
     )  
 )

Трудность возникла, когда возникла потребность выводить информацию, где встречается условие 15185211. В первом массиве находятся данные которые нужно связать со вторым массивом по этому условию. Со второго массива берется такая информация как [item_name], [image_url] и т.д., и выводится на экран. Вот тут я и запутался как обратится к [attributes] и присвоить условие == 15185211 чтобы выводилась информация только когда есть совпадение по условию.
Сейчас я использую следующий цикл
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$items_array = $backpack_data['result']['items']; // Первый массив
$schema_array = $schema_data['result']['items']; // Второй массив
 
foreach($items_array as $item)// Первый массив
    {
        foreach($schema_array as $schema_item)// Второй массив
    
            if($schema_item['defindex'] == $item['defindex'])
            {
                
                echo '<img src="'.$schema_item['image_url'].'" title="'.$schema_item['item_name'].' '.$item['level'].' level">';
                break;
            }
     }
Тут я по ['defindex'] сравниваю и если есть совпадения, то есть в данных есть номер ['defindex'] в первом массиве, то мы ищем его во втором и при совпадении выводим в echo дополнительную информацию. Также я могу вывести данные добавив условие if ($item['level'] == 100) и мне выведутся только данные по ['level'] равные 100, но когда понадобилось вывести только по условию с массива(или под массива - как правильно) [attributes] возникла заминка. Ссылка ввида $items_array = $backpack_data['result']['items']['attributes']; - не работает

Укажите верный путь, мануалы и т.д. чтобы понять и решить эту задачку. Спасибо.

Добавлено через 7 часов 11 минут
Знатоки как правильно обратиться к вложенному массиву ['attributes']?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2015, 00:15
Ответы с готовыми решениями:

Вывод многомерного массива
Доброго времени суток. Как вывести на экран многомерный массив(размерность &gt; 2)?

Вывод из многомерного массива
Есть массив: echo '&lt;pre&gt;'.print_r($arBalance, true).'&lt;/pre&gt;'; Выводит видом: Array ( =&gt; 0 =&gt;...

Вывод многомерного массива
Доброго времени суток, впал в ступор с выводом массива, нужно создать из него (имеющегося массива) меню. Чтобы значение ключа Link попадало...

3
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
12.04.2015, 00:33
PHP
1
2
$backpack_data['result']['items'][0]['attributes'];
$schema_data['result']['items'][0]['attributes'];
Результат:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// первый массив
Array
(
    [0] => Array
        (
            [defindex] => 142
            [value] => 1265087803
            [float_value] => 15185211
        )
 
    [1] => Array
        (
            [defindex] => 261
            [value] => 1265087803
            [float_value] => 15185211
        )
 
    [2] => Array
        (
            [defindex] => 292
            [value] => 1115684864
            [float_value] => 64
        )
 
    [3] => Array
        (
            [defindex] => 388
            [value] => 1115684864
            [float_value] => 64
        )
 
)
// второй массив
Array
(
    [0] => Array
        (
            [name] => set item tint RGB
            [class] => set_item_tint_rgb
            [value] => 15185211
        )
 
)
0
0 / 0 / 0
Регистрация: 11.04.2015
Сообщений: 3
12.04.2015, 14:52  [ТС]
Lazy_Den, Спасибо за ответ! Ваш вариант мне известен, но это не решает проблему. Таких пронумерованных подмассивов больше 500 и добавляются новые и также удаляются. PHP сам нумерует такие массивы.Ваш пример выводит первый вложенный массив. В моем примере после декодирования можно увидеть, что массив получил номер 65. Если я укажу $backpack_data['result']['items'][65]['attributes'];, то также обращусь к нему.Дело в том как правильно указать, чтобы перебирались все такие массивы, так как номера всех могут быть неизвестны, так как динамически удаляются и добавляются в разных количествах.
0
0 / 0 / 0
Регистрация: 11.04.2015
Сообщений: 3
14.04.2015, 09:18  [ТС]
$items_array = $backpack_data['result']['items'][как указать все пронумерованные массивы, если их количество не известно]['attributes'];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.04.2015, 09:18
Помогаю со студенческими работами здесь

Вывод многомерного массива
Добрый вечер! Столкнулся с проблемой - имеется многомерный массив. Хочу вывести элементы каждого массива в отдельный div (или ячейку...

Вывод многомерного массива лесенкой
У нас есть матрица 4х4, её надо заполнить числами, и вывести лесенкой! Как её вывести лесенкой? $users4x4 = , , , , ...

Вывод всех элементов многомерного массива
Добрый день. Подскажите скрипт для вывода всех элементов многомерного массива неизвестной глубины вложенности. Так, чтобы была видна его...

Заполнение многомерного массива и его вывод
1. Написать программу, организующую заполнение массива размерностью n*m элементов случайными целыми значениями (n, m – именованные...

Сформировать вывод данных из многомерного массива
Доброго времени суток, помогите вывести данные из такого многомерного массива array(6) { =&gt; array(4) { =&gt; string(12)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru