Выполнить ту же логику для нескольких многомерных массивов - PullRequest
1 голос
/ 28 мая 2019

Я сейчас пытаюсь сделать следующее:

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

//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"});

Теперь для всех этих массивов я хочу сделать одно и то же.В моем случае у меня есть несколько случаев, если я проверяю длину массива и делаю что-то еще.

Пока я делаю это только для массива 1.Теперь моя первая идея состояла в том, чтобы просто скопировать логику и изменить все имена переменных в array2 соответственно в array3, но это не имело бы смысла, потому что в моем реальном случае это 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
}

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

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

1 Ответ

1 голос
/ 28 мая 2019

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

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
}
...