Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777

Как в многомерном массиве по ключу найти значения

02.10.2020, 13:32. Показов 3529. Ответов 3

Студворк — интернет-сервис помощи студентам
Добрый день.
Есть многомерный массив с данными, ключи не повторяются:
PHP
1
2
3
4
$prs = array(   "av"=>array("EPK"=>array(40,50,60)),
                "ap"=>array("GBHDFE"=>array(70,80,90),"GBHDE"=>array(100,110,120)),
                "as"=>array("GNFCA"=>array(130,140,150),"GNFA"=>array(160,170,180))
                );
Подскажите, есть ли функция php, которая в многомерном массиве находит значения по ключам?
Если нет, то помогите написать функцию, которая находит значения (в моём случае это массивы) по ключам и складывает значения ([0]+[0]+[0],[1]+[1]+[1],[2]+[2]+[2]).
PHP
1
2
3
function aaa(){}
print_r (aaa("GNFA","EPK")); //array(200,220,240);
print_r (aaa("GNFCA","EPK","GBHDFE")); //array(240,270,300);
К сожалению, дальше foreach я не прошёл.
Заранее благодарен за помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2020, 13:32
Ответы с готовыми решениями:

Как в многомерном ассоциативном массиве найти ключ элемента 1 уровня, по ключу и значению 2 уровня?
есть массив: Array ( => Array ( => 1 => Северный => Дзержинского, 20 ...

Как найти все значения одного массива в другом многомерном массиве?
Доброго времени суток! Вообще задача сначала стояла так, но перемучившись решил сложить это бремя на PHP. Итак... имею на выходе массив...

Как реализовать поиск значения в многомерном массиве
есть двухмерный массив: double Array = new double; 100 это количество строк 5 это количество колонок. В колонке 5 хранятся даты....

3
Невнимательный
 Аватар для ft4l
3112 / 1290 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
02.10.2020, 14:30
Цитата Сообщение от alanat Посмотреть сообщение
в многомерном массиве
Многомерный неизвестной вложенности это одно...
и нужно что-то типа рекурсии например
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cat <<\x | /c/t/usr/php74/php
 
<?php
$prs = array(   "av"=>array("EPK"=>array(40,50,60)),
                "ap"=>array("GBHDFE"=>array(70,80,90),"GBHDE"=>array(100,110,120)),
                "as"=>array("GNFCA"=>array(130,140,150),"GNFA"=>array(160,170,180))
                );
function find_n_sum(&$arr, $key) {
  if (isset($arr[$key])) return array_sum($arr[$key]);
  foreach(array_keys($arr) AS $str) {
    if (is_array($arr[$str]) && ($r = find_n_sum($arr[$str], $key)) !== FALSE)
      return $r; } return FALSE;
}
echo ' EPK = ', find_n_sum($prs, 'EPK'), "\n GNFA = ", find_n_sum($prs, 'GNFA'),"\n",
   "\n ap = ", find_n_sum($prs, 'ap'),"\n";
x
 
 EPK = 150
 GNFA = 510
 
 ap = PHP Fatal error:  Uncaught Error: Unsupported operand types in Standard input code:9
В приведённом коде массив просто трёхмерный...
и нужно искать только на одном уровне, наверно
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$prs = array(   "av"=>array("EPK"=>array(40,50,60)),
                "ap"=>array("GBHDFE"=>array(70,80,90),"GBHDE"=>array(100,110,120)),
                "as"=>array("GNFCA"=>array(130,140,150),"GNFA"=>array(160,170,180))
                );
function find_n_sums(&$arr, $keys) {
    $r = array();
    foreach($keys AS $k) {
       foreach(array_keys($arr) AS $kk) if ( isset($arr[$kk][$k])) {
           $r[$k] = array_sum($arr[$kk][$k]);
           continue 2;
         }
      $r[$k] = FALSE;
    }  return $r;
}
 
var_export(find_n_sums($prs, ['GNFA', 'EPK', 'ap']));
array (
'GNFA' => 510,
'EPK' => 150,
'ap' => false,
)

если очень надо искать сразу несколько сумм )

Не по теме:

Возможно оптимальнее один раз проходить первый уровень при этом получая суммы для всех ключей
... т.е как-бы поменять два foreach местами ))
как-то не обдумывал это

0
12 / 12 / 1
Регистрация: 16.07.2012
Сообщений: 777
02.10.2020, 15:55  [ТС]
Цитата Сообщение от x_lab Посмотреть сообщение
array (
'GNFA' => 510,
'EPK' => 150,
'ap' => false,
)
Не очень понял, что сложилось. Подразумевалось, что ответом будет массив типа
PHP
1
2
//array(200,220,240);
 //array(240,270,300);
0
Невнимательный
 Аватар для ft4l
3112 / 1290 / 359
Регистрация: 08.02.2013
Сообщений: 7,566
Записей в блоге: 2
02.10.2020, 16:50
Лучший ответ Сообщение было отмечено alanat как решение

Решение

Цитата Сообщение от alanat Посмотреть сообщение
значения (в моём случае это массивы) по ключам и складывает значения ([0]+[0]+[0],[1]+[1]+[1],[2]+[2]+[2]).
наверно я не правильно подумал )
//array(200,220,240);
//array(240,270,300);
Тоже не понятно...
функция может вернуть массив, из трёх сумм и без ключей
уберите из $k из $r[$k] = array_sum($arr[$kk][$k]);
т.е.
PHP
10
           $r[] = array_sum($arr[$kk][$k]);
у уберите совсем $r[$k] = FALSE; или сделайте $r[] = 0;
чтобы не было 'ap' => false,

Вариантов наверно сотни , какой может быть функция , и для чего она может быть нужна,
и какие данные возможно могут быть её подсунуты.
... Для такого вызова как в первом сообщении можно использовать
func_get_arg ( int $arg_num ) : mixed
https://www.php.net/manual/ru/... t-args.php

Но не передавать сам массив(или ссылку на него) как аргумент,
значит что имя переменной массива заранее известно и в функции есть
global $имя;
или используется $GLOBALS

... вариантов как я говорил много , и выбирается то что считается наиболее выбираемым )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2020, 16:50
Помогаю со студенческими работами здесь

Как найти элемент в многомерном массиве?
Здравствуйте, форумчане! Есть два многомерных массива. Глубина 2 и 4. Нужный элемент может содержаться на любом из уровней. Как...

Как в многомерном массиве найти значение ключа выше по иерархии ?
Например есть многомерный массив Array ( =&gt; Array( =&gt; а =&gt; б =&gt; в) =&gt; Array( =&gt; г =&gt; д =&gt; е) ) Зная...

Поиск значения в многомерном массиве
$array = , 'market' =&gt; 'shopping', 'red' =&gt; 'color', 'education' =&gt; 'learning', 'fruits' =&gt; ]; ...

Как найти слово, в многомерном массиве. и если оно найдено то вывести его
Добрый день есть массив например &quot;kind&quot;: &quot;calendar#events&quot;, &quot;etag&quot;: &quot;\&quot;лорлорлорлор\&quot;&quot;, &quot;items&quot;: 6801 арпарпа рарарп рпарпа...

Поиск значения в многомерном массиве, с неограниченной вложеностью
Всем привет! Помогите с многомерным массивом, нужно получить значение в многомерном массиве! Например вот есть такой массив: Array ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru