更改方法的返回值,为每种情况保持不变

时间:2014-09-18 15:09:24

标签: php oop

好的,所以我有一个总能产生多维数组的方法。如此改变该方法的输出是不错的编程习惯:

            //$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 个答案:

答案 0 :(得分:1)

不知道你的设计很难分辨;但总的来说,我建议不要这样做。保持返回的数据结构一致将使得处理结果变得更加容易,因为您将能够使用相同的逻辑遍历返回的结果。

答案 1 :(得分:1)

问题不是你希望这个功能做什么,而是你打算稍后用数据做什么。根据我的经验,拥有一致的结构(二维数组)是更多比具有不同深度的阵列更方便。如果您的二维数组只有一行,那么问题是什么?您的顶级循环将运行一次并返回。如果你有不同的数组形状,你的代码的其余部分将需要检测和处理所有这些。

实际上我有时会编写相反的代码:如果函数可以接受单个字符串或字符串列表,我会立即将单个字符串转换为长度为1的列表。然后剩下的代码只有一个案例要处理。