Итак, у меня есть метод, который всегда будет производить многомерный массив. Это хорошая практика программирования, чтобы изменить вывод этого метода следующим образом:
//$arr is a multi dimensional array that can sometimes contain a single array with a single object
//Or sometimes return multiple arrays in the parent array, and even sometimes return an array of an array with multiple objects.
if(sizeof($arr)==1){
//doesnt need to be 2D reduce to 1D
$arr = reset($arr);
if(sizeof($arr)==1){
//1D isnt necassary as its a single object reduce!!
$arr = reset($arr);
}else{
//return is a one dimensional array
}
}else{
//2D has multiple arrays inside lets check if thos arrays can be reduced to single objects
foreach ($arr as $key => $value)
{
if(sizeof($value)==1){
//array is single object reduce so parent array becomes a mixed single object and arrays
$arr[$key] = reset($arr[$key]);
}else{
//is array
}
}
}
Если это нормально, иметь такую практику, это лучший способ выполнить эту задачу?
это внутри метода класса. Мой основной вопрос: если это приемлемо? Вторичный, если это их лучший способ.
Без знания вашего дизайна трудно сказать; но в целом я бы предложил не делать этого. Сохранение формы возвращенной структуры данных значительно облегчит обработку результатов, поскольку вы сможете всегда возвращаться к возвращаемому результату с использованием одной и той же логики.
Вопрос не в том, что вы хотите, чтобы эта функция делала, а в том, что вы планируете делать с данными позже. По моему опыту, иметь согласованную структуру (двумерный массив) гораздо удобнее, чем иметь массивы различной глубины. Если ваш 2-мерный массив имеет только одну строку, в чем проблема? Ваш цикл верхнего уровня запустится один раз и вернется. Если у вас разные формы массива, остальной код должен будет обнаружить и обработать их все.
На самом деле я иногда пишу код, который делает противоположное: если функция может принять одну строку или список строк, внутренне я немедленно преобразую одну строку в список длины один. Тогда остальной код имеет только один случай для обработки.