数组没有创建我想要的东西

时间:2013-10-18 15:03:43

标签: php arrays

所以我根据一组子信息创建了这个数组。第一点是关于自定义列。我们得到一个模型对象,这是一个数组。

所以我告诉方法,我遇到了问题,我希望字段是这样的:

    $customReportObject = array(
        'date_created' => 'project_date',
        'project_number' => 'project_number',
        'name'  => 'project_name',
        'description' => 'project_description',
        'manager' => 'project_manager_name'
    );

数组设置为custom_column_name=>actual_model_column_name

传递了两种模型:

array(
    'projects' => $activeProjects,
    'PM' => $projectManager
)

数组设置为model_name=>model,模型是数组数组。

然后我们将以下内容传递给:

private function customCollumns($model, $fields){
    $result = array();

    foreach($model as $modelName=>$modelObject){
        foreach($modelObject as $model){
            foreach($fields as $fieldName=>$actualName){
                if(array_key_exists($actualName, $model)){
                    $result[$fieldName] = $model[$actualName];
                }
            }
        }
    }

    return $result;
 }

这会返回一个数组,当var_dump ed看起来像这样:

array(5) {
  ["date_created"]=>
  string(10) "1381903200"
  ["project_number"]=>
  string(5) "02785"
  ["name"]=>
  string(9) "gfhfghfgh"
  ["description"]=>
  string(9) "fghgfhfgh"
  ["manager"]=>
  string(11) "Kevin Allen"
}

现在这是我想要的,但事实并非如此。一,有266这个,就像应该有的一样。 接受!所有266完全相同 MINUS 始终更改的manager。我很肯定我的循环有问题以及它是如何创建结果数组的。当$activeProjects ed由266个不同的数组组成时var_dump,不同的意思是每个数组的所有内容都不同。

有人可以告诉我为什么我会收到266同样的东西减去经理以及我将如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你只是反复填写$result数组的相同元素。您需要一个二维数组,因此您需要为每个模型创建一个子数组,并将其附加到主结果数组。

private function customCollumns($model, $fields){
    $result = array();

    foreach($model as $modelName=>$modelObject){
        foreach($modelObject as $i => $model){
            $new_array = isset($result[$i]) ? $result[$i] : array();
            foreach($fields as $fieldName=>$actualName){
                if(array_key_exists($actualName, $model)){
                    $new_array[$fieldName] = $model[$actualName];
                }
            }
            $result[$i] = $new_array;
        }
    }

    return $result;
 }