Связывание массивов в соответствии с общими значениями - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть такой массив, как

0: [id: '1',department: 'xyz',date: '10-10-2019',time: '12:50']

1: [id: '1',department: 'xyz',date: '11-10-2019',time: '10:30']

2: [id: '2',department: 'abc',date: '09-09-2019',time: '09:50']

3: [id: '2',department: 'abc',date: '07-07-2019',time: '03:20']

Я хочу, чтобы они были объединены в соответствии с id и department

, поэтому массивы 0 и 1 будут объединены вместе, и на выходе должно быть что-то вроде

0:[id: '1',department: 'xyz',[[date: '10-10-2019',time: '12:50'],[date: '11-10-2019',time: '10:30']]]

и массивы 2 и 3 будут объединены вместе, и на выходе должно быть что-то вроде

1:[id: '2',department: 'abc',[[date: '09-09-2019',time: '09:50'],[date: '07-07-2019',time: '03:20']]]

как это сделать?

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Попробуйте это ..

 $input = [
0 =>['id' => '1','department' => 'xyz','date' => '10-10-2019','time' => '12:50'],
1 => ['id' => '1','department' => 'xyz','date' => '11-10-2019','time' => '10:30'],
2 => ['id' =>  '2','department' => 'abc','date' => '09-09-2019','time' => '09:50'],
3 =>['id' => '2','department' => 'abc','date' => '07-07-2019','time' => '03:20']];
$output = [];
$id_array = [];
foreach ($input as $values) 
{
  $id_array [] = $values['id'];
}
$unique_id_array = array_unique($id_array);
foreach($input as $key => $in)
{
  if(array_key_exists($key,$unique_id_array))
  {
    $output[] = [
            'department' => $in['department'],
            'id' => $in['id']
            ];
  }
}
foreach($input as $in)
{
foreach($output as $key => $out)
    {
      if($out['id'] == $in['id'] && $out['department'] == $in['department'])
      {
          $output[$key]['date_time'][] = ['date' =>$in['date'],'time' => $in['time']];
      }

    }
}
print_r($output);die();

Выход будет

Array
(
[0] => Array
    (
        [department] => xyz
        [id] => 1
        [date_time] => Array
            (
                [0] => Array
                    (
                        [date] => 10-10-2019
                        [time] => 12:50
                    )

                [1] => Array
                    (
                        [date] => 11-10-2019
                        [time] => 10:30
                    )

            )

    )

[1] => Array
    (
        [department] => abc
        [id] => 2
        [date_time] => Array
            (
                [0] => Array
                    (
                        [date] => 09-09-2019
                        [time] => 09:50
                    )

                [1] => Array
                    (
                        [date] => 07-07-2019
                        [time] => 03:20
                    )

            )

    )

)
0 голосов
/ 03 октября 2019

Здравствуйте, я думаю, что это будет хорошо работать, и это простой и лучший способ добиться вашего результата. я пробовал много кодов в моей системе с данными, предоставленными вами, попробуйте это, я надеюсь, это будет работать и для вас.

<?php 
    $inputArr =   [0 =>['id' => '1','department' => 'xyz','date' => '10-10-2019','time' => '12:50'],1 => ['id' => '1','department' => 'xyz','date' => '11-10-2019','time' => '10:30'],2 => ['id' =>  '2','department' => 'abc','date' => '09-09-2019','time' => '09:50'],3 =>['id' => '2','department' => 'abc','date' => '07-07-2019','time' => '03:20']];
    print_r($inputArr);
    $second_copy = $inputArr;
    foreach ($inputArr as $key => $single) 
    {
        $goalArr[$single['id']] = getRow($single['id'],$single['department'],$second_copy);
    }
    function getRow($id,$department,$second_copy)
    {
        $returnArr['id'] = $id;
        $returnArr['department'] = $department;
        foreach ($second_copy as $key => $single)
        {
            if($id == $single['id'] && $department == $single['department'])
            {
                $returnArr['date'][] = $single['date'];
                $returnArr['time'][] = $single['time'];
            }
        }
        return $returnArr;
    }
    echo "<br>Output is: <br>";
    print_r($goalArr);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...