Объединить несколько вхождений массива в PHP - PullRequest
0 голосов
/ 25 апреля 2020

поэтому у меня есть массив со структурой данных, такой как

$array = [{ ["StartTime"]=> "2020-04-25T08:45:00-07:00",  ["Subject"]=> "Beach Walk" }, { ["StartTime"]=> "2020-04-27T08:45:00-07:00",  ["Subject"]=> "Beach Walk" }, { ["StartTime"]=> "2020-04-27T08:45:00-07:00",  ["Subject"]=> "Camping Techniques"} ]
];

Я хочу создать новый массив в PHP, который объединяет экземпляры с одним и тем же предметом и все время объединяет желаемый вывод :

$DesireArray = [{ ["StartTimes"]=> "2020-04-25T08:45:00-07:00", "2020-04-27T08:45:00-07:00",["Subject"]=> "Beach Walk" }, { ["StartTimes"]=> "2020-04-27T08:45:00-07:00",  ["Subject"]=> "Camping Techniques"} ]
];

Я пробовал несколько функций, но ни одна из них не принесла мне желаемого результата. Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Раствор только с одним l oop,

$array = [
  [
    "StartTime" => "2020-04-25T08:45:00-07:00",
    "Subject" => "Beach Walk",
  ],
  [
    "StartTime" => "2020-04-27T08:45:00-07:00",
    "Subject" => "Beach Walk"
  ],
  [
    "StartTime" => "2020-04-27T08:45:00-07:00",
    "Subject" => "Camping Techniques",
  ],
];

$out = [];
foreach ($array as $key => $x) {
  $sub = $x['Subject'];

  $out[$sub]['StartTimes'][] = $x['StartTime'];
  $out[$sub]['Subject'] = $x['Subject'];
}

$final = array_values($out);
print_r($final);

// output:
/**

Array
(
    [0] => Array
        (
            [StartTimes] => Array
                (
                    [0] => 2020-04-25T08:45:00-07:00
                    [1] => 2020-04-27T08:45:00-07:00
                )

            [Subject] => Beach Walk
        )

    [1] => Array
        (
            [StartTimes] => Array
                (
                    [0] => 2020-04-27T08:45:00-07:00
                )

            [Subject] => Camping Techniques
        )

)
 **/
0 голосов
/ 25 апреля 2020

Идея состоит в том, чтобы сначала прочитать исходный массив и переставить элементы так, как вы хотите:

$array = [[ "StartTime"=> "2020-04-25T08:45:00-07:00",  "Subject"=> "Beach Walk" ], [ "StartTime"=> "2020-04-27T08:45:00-07:00",  "Subject"=> "Beach Walk" ], [ "StartTime"=> "2020-04-27T08:45:00-07:00",  "Subject"=> "Camping Techniques"] ];
print_r($array);echo "<BR><BR>";
$arrayStartTimes = array();
$arraySubject = array();
foreach ($array as $arrayAux){
    foreach ($arrayAux as $key=>$value){
        if ($key == "StartTime") $startTime = $value;
        if ($key == "Subject") {
            $arrayStartTimes[$value][] = $startTime;
            if (!in_array($value,$arraySubject)) $arraySubject[] = $value;
        }
    }
}
$DesiredArrayNew = array();
foreach ($arraySubject as $iSubject){
    $auxArray = array();
    $auxArray2 = array();
    echo "$iSubject: ";
    foreach ($arrayStartTimes[$iSubject] as $iStart){
        echo " $iStart,";
        $auxArray2[] = $iStart;
    }
    echo "<BR>";
    $auxArray["StartTimes"]=$auxArray2;
    $auxArray["Subject"]=$iSubject;
    $DesiredArrayNew[] = $auxArray;
}
echo "<BR><BR>";
$DesireArray = [["StartTimes"=> ["2020-04-25T08:45:00-07:00", "2020-04-27T08:45:00-07:00"],"Subject"=> "Beach Walk" ], [ "StartTimes"=> ["2020-04-27T08:45:00-07:00"],  "Subject"=> "Camping Techniques"]];
print_r($DesireArray);
echo "<BR><BR>";
print_r($DesiredArrayNew);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...