PHP, как создать новый многомерный массив с 1 или более ключей одинаковы? - PullRequest
0 голосов
/ 10 июня 2018

У меня есть следующие многомерные массивы

if($this->conn->row_count($sql)==true){
    while($row=$statement->fetch()){
        $problems[]=[
                    'order_id'=>$row['order_id'],
                    'details'=>['remark'=>$row['remark'],'date'=>$row['date']]
                    ];
    }
    return $problems;
}

И затем я распечатываю их

<code>echo '<pre>',print_r($problems),'
';

Результат

Array
(
    [0] => Array
        (
            [order_id] => 4683
            [details] => Array
                (
                    [remark] => happy
                    [date] => 2018-06-09---10:16:41am
                )

        )

    [1] => Array
        (
            [order_id] => 4683
            [details] => Array
                (
                    [remark] => unhappy
                    [date] => 2018-06-10---03:29:00am
                )

        )

    [2] => Array
        (
            [order_id] => 4440
            [details] => Array
                (
                    [remark] => very unhappy
                    [date] => 2018-06-10---03:34:00am
                )

        )

)   

Я пытаюсь сгруппировать их в новый многомерный массив, если тот же order_id и объединить детали.У order_id может быть больше 2, потому что у этого order_id может быть больше замечаний *, как у следующего

Array
(
    [0] => Array
        (
            [order_id] => 4683
            [details] => Array
                (
                    [remark] => happy
                    [date] => 2018-06-09---10:16:41am
                ),
                (
                    [remark] => unhappy
                    [date] => 2018-06-10---03:29:00am
                )

        )

    [1] => Array
        (
            [order_id] => 4440
            [details] => Array
                (
                    [remark] => very unhappy
                    [date] => 2018-06-10---03:34:00am
                )

        )

)   

Чтобы получить более четкое изображение, посмотрите на скриншот

enter image description here

Есть идеи, как создать новый массив так же, как Output?

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете сгруппировать его по ассоциативному массиву.Вы можете использовать array_values для преобразования ассоциативного массива в простой массив.

$problems = [];
if($this->conn->row_count($sql)==true){
    while($row=$statement->fetch()){
        if ( !isset( $problems[ $row['order_id'] ] ) ) {
            $problems[ $row['order_id'] ] = [
                'order_id' => $row['order_id'],
                'details' => []
            ];
        }
        $problems[ $row['order_id'] ]['details'][] = ['remark'=>$row['remark'],'date'=>$row['date']];
    }
    return array_values( $problems );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...