В настоящее время я пытаюсь сделать следующее:
У меня определено несколько массивов. Все они заполняются путем извлечения данных из базы данных, поэтому все они содержат одни и те же столбцы/структуру данных, но с разными данными. Например, скажем, массивы - это разные школы, поэтому есть:
//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
}
Намек в правильном направлении было бы здорово.
Заранее спасибо.
экспортировать всю свою логику в функцию, которая инкапсулирует модификацию вашего массива?
@AymDev Мне все еще нужно иметь возможность различать массивы ... Также я не знаю длины каждого массива, только структуру
Затем, как сказал @dWinder, используйте функцию.
@dWinder, но как мне тогда получить доступ к своим массивам в функции? Конечно, я передаю его функции в качестве параметра, но я имею в виду, как передать функции все массивы?
Конечно, я мог бы использовать функцию doSomething($myArray){//сделать что-нибудь с $myArray}, а затем вызвать doSomething($array1); сделать что-то ($массив2); и т.д., а можно ли так же сделать это сразу для всех массивов в цикле вместо вызова функции для каждого массива?
foreach ($all_your_arrays as $arr) { do_stuff_to_process_array($arr); }
? По сути, просто добавьте []
вокруг вашего array1, array2...arrayN
в вашем псевдокоде, чтобы сгруппировать их все в массив для создания $all_your_arrays
.
Код процедуры требует экспорта логики в функцию:
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]["Фамилия"]? Это будет работать правильно?
да. PHP может обрабатывать многомерные массивы на более глубоком уровне. и да - вы можете получить к ним доступ как $arrays[0][0]["Surname"]
хорошо, большое спасибо! :) По сути, мне просто не хватало части, чтобы назначить все массивы одному большому массиву, поэтому я не знал, как работать с функцией для каждого массива...
Используете
array_merge()
?