操纵或修改阵列

时间:2016-08-26 04:46:27

标签: php arrays sorting multidimensional-array array-merge

我是PHP的新手。我正在用php做一个我的项目,我是数组函数和所有这些东西的新手。我试过但没有成功。让我告诉你我的SQL查询数组。 我有一个我的数组,如下所示:

Array
(
    [0] => Array
        (
            [pc_eventDate] => 2016-08-25
            [ufname] => Rutul
            [ulname] => Shah
            [name] =>  Clinic
        )

    [1] => Array
        (
            [pc_eventDate] => 2016-08-26
            [ufname] => Rutul
            [ulname] => Shah
            [name] =>  Clinic
        )

    [2] => Array
        (
            [pc_eventDate] => 2016-08-25
            [ufname] => Administrator
            [ulname] => Administrator
            [name] =>  Clinic
        )

    [3] => Array
        (
            [pc_eventDate] => 2016-08-26
            [ufname] => Administrator
            [ulname] => Administrator
            [name] =>  Clinic
        )

    [4] => Array
        (
            [pc_eventDate] => 2016-08-25
            [ufname] => Administrator
            [ulname] => Administrator
            [name] =>  Clinic
        )

    [5] => Array
        (
            [pc_eventDate] => 2016-08-26
            [ufname] => Amit
            [ulname] => Mahida
            [name] => Cancer Specialist
        )

    [6] => Array
        (
            [pc_eventDate] => 2016-08-26
            [ufname] => Amit
            [ulname] => Mahida
            [name] => Breach Candy Hospital
        )

)

现在我想要我的结果数组如下:

Array
(
    [2016-08-25] => Array
        (
            [ Clinic] => Array
                (
                    [Rutul Shah] => Array
                        (
                            [appointments] => 1
                        )

                    [Administrator Administrator] => Array
                        (
                            [appointments] => 2
                        )

                )

        )

    [2016-08-26] => Array
        (
            [Clinic] => Array
                (
                    [Rutul Shah] => Array
                        (
                            [appointments] => 1
                        )
                    [Administrator Administrator] => Array
                        (
                            [appointments] => 1
                        )

                )
                [Cancer Specialist] => Array
                    (
                        [Amit Mahida] => Array
                            (
                                [appointments] => 1
                            )
                    )
                [Breach Candy Hospital] => Array
                    (
                        [Amit Mahida] => Array
                            (
                                [appointments] => 1
                            )
                    )

        )

)

2 个答案:

答案 0 :(得分:1)

您希望遍历约会数组并使用其内容生成其他数据结构。让我们调用您的第一个数组$input和第二个数组$output

// initialize output array
$output = [];

// loop through each $appt in the $input array
foreach($input as $appt) {
  // get shorter var names for appt data
  $date = $appt['pc_eventDate'];
  $name = $appt['name'];
  $uname = $appt['ufname'].' '.$appt['ulname'];

  // initialize each level of the data structure if it doesn't already exist
  if(!isset($output[$date])) $output[$date] = [];   
  if(!isset($output[$date][$name])) $output[$date][$name] = [];
  if(!isset($output[$date][$name][$uname])) $output[$date][$name][$uname] = [];
  // initialize the number of appts to 0
  if(!isset($output[$date][$name][$uname]['appointments'])) $output[$date][$name][$uname]['appointments'] = 0;

  // increment the number of appts
  $output[$date][$name][$uname]['appointments']++;
}

重要的是根据旧结构中的数据对新结构中的每个子阵列进行初始化 - 从那里我们只计算与新数据匹配的约会数量。

祝你好运!

答案 1 :(得分:0)

假设数组是问题$arr

这将以您想要的方式安排数组作为解决方案

foreach ($arr as $key => $value) {
    if(!is_array($value['pc_eventDate]))
          $value['pc_eventDate] = [];
    if(!is_array($value['pc_eventDate]['name'])) 
          $value['pc_eventDate]['name'] = []; 
    if(!is_array($value['pc_eventDate']['name']['ufname'.' ulname'])){
          $value['pc_eventDate']['name']['ufname'.' ulname'] = [];
           $value['pc_eventDate']['name']['ufname'.' ulname']['appointments'] = 1;
    }else{
         $value['pc_eventDate']['name']['ufname'.' ulname']['appointments'] += 1;
    }
}

你需要做类似上面的事情。 尝试运行上面的代码,可能会有一些错字。如果它没有产生你想要的结果,请尝试注释foreach主体中的所有行,并var_dump()每一步测试数组结构的构建。

由于