Выполнение той же логики для нескольких многомерных массивов

В настоящее время я пытаюсь сделать следующее:

У меня определено несколько массивов. Все они заполняются путем извлечения данных из базы данных, поэтому все они содержат одни и те же столбцы/структуру данных, но с разными данными. Например, скажем, массивы - это разные школы, поэтому есть:

//pseudoCode:
array1 = ({"Name: Peter", "Surname: not peter"},{"Name: doe", "Surname: john"});
array2 = ({"Name: asfwe", "Surname: qwfqwf"},{"Name: asfas", "Surname: fsbng"});
array3 = ({"Name: weqw", "Surname: wqeqewqw"},{"Name: doqweqwee", "Surname: wewe"});

Теперь для всех этих массивов я хочу сделать то же самое. В моем случае у меня есть несколько случаев if else, проверка длины массива и некоторые действия.

Пока я делаю это только для массива 1. Теперь моей первой идеей было просто скопировать логику и реорганизовать все имена переменных в массив2 соответственно в массив3, но это не имело бы смысла, потому что в моем реальном случае это 10 массивов вместо 3, а логика составляет около 150 строк кода. , поэтому у меня было бы много дублирующегося кода и нужно было бы его везде менять, если что-то в логике изменится.

Теперь вопрос: как я могу сделать одну и ту же процедуру для каждого массива?

Итак, мне нужно что-то вроде:

//pseudoCode again
foreach(array in array1, array2, array3, array4, array5,....){
//do something with variable "array", which is actually one of the defined arrays
}

Намек в правильном направлении было бы здорово.

Заранее спасибо.

Используете array_merge() ?

AymDev 28.05.2019 21:57

экспортировать всю свою логику в функцию, которая инкапсулирует модификацию вашего массива?

dWinder 28.05.2019 21:58

@AymDev Мне все еще нужно иметь возможность различать массивы ... Также я не знаю длины каждого массива, только структуру

nameless 28.05.2019 21:58

Затем, как сказал @dWinder, используйте функцию.

AymDev 28.05.2019 22:00

@dWinder, но как мне тогда получить доступ к своим массивам в функции? Конечно, я передаю его функции в качестве параметра, но я имею в виду, как передать функции все массивы?

nameless 28.05.2019 22:00

Конечно, я мог бы использовать функцию doSomething($myArray){//сделать что-нибудь с $myArray}, а затем вызвать doSomething($array1); сделать что-то ($массив2); и т.д., а можно ли так же сделать это сразу для всех массивов в цикле вместо вызова функции для каждого массива?

nameless 28.05.2019 22:02
foreach ($all_your_arrays as $arr) { do_stuff_to_process_array($arr); }? По сути, просто добавьте [] вокруг вашего array1, array2...arrayN в вашем псевдокоде, чтобы сгруппировать их все в массив для создания $all_your_arrays.
ggorlen 28.05.2019 22:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
7
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код процедуры требует экспорта логики в функцию:

function foo($array) {
    // modify the array or do what ever you need
    return $array; // in case it has been modify
}

Теперь вы можете действовать как:

foreach($arrays as &$arr)
    $arr = foo($arr); // calling the function on each array
    // the re-assign is just in case it has been modify

В этом примере $arrays обозначает массив со всеми вашими внутренними массивами как:

$arrays = array($array1, $array2, $array3, ...) 

если ваш массив динамически получает из какой-либо другой функции/кода SQL:

$arrays = []; // init empty array
while (@SOME_CONDITION@) {
    $arrays[] = getAnotherArrayFunction(); // append the array to your array
}

о боже, я тупой, если это работает, то это действительно проще, чем я думал. Вопрос в том, сколько измерений может обрабатывать PHP? Будет ли проблемой получить доступ к одному элементу из $array1 (скажем, по фамилии Питера), а затем вызвать $arrays[0][0]["Фамилия"]? Это будет работать правильно?

nameless 28.05.2019 22:05

да. PHP может обрабатывать многомерные массивы на более глубоком уровне. и да - вы можете получить к ним доступ как $arrays[0][0]["Surname"]

dWinder 28.05.2019 22:08

хорошо, большое спасибо! :) По сути, мне просто не хватало части, чтобы назначить все массивы одному большому массиву, поэтому я не знал, как работать с функцией для каждого массива...

nameless 28.05.2019 22:08

Другие вопросы по теме