Сравните два массива по ключу и значениям - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть 2 объекта, получаемых из Laravel Query Builder, оба объекта имеют некоторые характеристики для конкретного пользователя, оба имеют разные характеристики.что я хочу, это объединить оба объекта в один объект или массив.оба объекта имеют общий идентификатор.

Ниже приведены мои объекты.

Объект 1:

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => OrdersHistory Object
(
[timestamps] =>
[table:protected] => orders_history
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[attributes:protected] => Array
(
[walker_id] => 2002
[districts] =>
[main_city] => Riyadh
[sub_city] => Riyadh
[ofd] => 42
)

[original:protected] => Array
(
[walker_id] => 2002
[districts] =>
[main_city] => Riyadh
[sub_city] => Riyadh
[ofd] => 42
)

[relations:protected] => Array
(
)

[hidden:protected] => Array
(
)

[visible:protected] => Array
(
)

[appends:protected] => Array
(
)

[fillable:protected] => Array
(
)

[guarded:protected] => Array
(
[0] => *
)

[dates:protected] => Array
(
)

[touches:protected] => Array
(
)

[observables:protected] => Array
(
)

[with:protected] => Array
(
)

[morphClass:protected] =>
[exists] => 1
)

Объект 2:

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => DeliveryRequest Object
(
[table:protected] => delivery_request
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[confirmed_walker] => 2002
[walker] => علي 2002
[main_city] => Qunfudah
[d_city] => Qunfudah
[districts] => Al Khalidiyah, Ash Shamiyah, Ash Sharqiyyah, An Naimyyah, Al Azhar, Al Gharabi
[delivered] => 1
[undelivered] => 0
[toowner] => 0
[ree] => 0
)

Примечание: walker_id и confirmed_walker являются общими для обоих объектов.

Проблема:

У объекта 1 есть свойство ofd, которое я хочу объединить с объектом 2. Но существует проблемный объект 1, который может иметь walker_id, который не существует в объекте 2 как подтверждается_walker, поэтому в этом случае я хочу оф иСтатистика объекта 2 как 0.

Требуемый результат:

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => DeliveryRequest Object
(
[table:protected] => delivery_request
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[confirmed_walker] => 2002
[walker] => علي 2002
[main_city] => Qunfudah
[d_city] => Qunfudah
[districts] => Al Khalidiyah, Ash Shamiyah, Ash Sharqiyyah, An Naimyyah, Al Azhar, Al Gharabi
[delivered] => 1
[undelivered] => 0
[toowner] => 0
[ree] => 0
[ofd] => 42
)

, если walker_id не совпадает, тогда результат будет

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
(
[0] => DeliveryRequest Object
(
[table:protected] => delivery_request
[connection:protected] =>
[primaryKey:protected] => id
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
(
[confirmed_walker] => someotherwalkerId
[walker] => علي 2002
[main_city] => Qunfudah
[d_city] => Qunfudah
[districts] => Al Khalidiyah, Ash Shamiyah, Ash Sharqiyyah, An Naimyyah, Al Azhar, Al Gharabi
[delivered] => 0
[undelivered] => 0
[toowner] => 0
[ree] => 0
[ofd] => ofd from object 1
)

То, что я уже пробовал:

foreach ($withCaptain as $key => $value) { // object 1 foreach // 

    if (array_key_exists($key, $delivered)) { //$delivered is object2 // 

        $data = array(
            'walker' => $value->walker_id,
            'districts' => $delivered[$key]->districts,
            'main_city' => $delivered[$key]->main_city,
            'sub_city' => $delivered[$key]->d_city,
            'ofd' =>    $value->ofd,
            'delivered' => $delivered[$key]->delivered,
            'undelivered' => $delivered[$key]->undelivered,
            'returned' => ($value->ofd - ($delivered[$key]->delivered + $delivered[$key]->undelivered)),
            'successRate' => round((($delivered[$key]->delivered / $value->ofd) * 100),2)

        );

            array_push($dataArray,$data);

        }else{


            $data = array(
                'walker' => $value->walker_id,
                'districts' => $value->districts,
                'main_city' => $value->main_city,
                'sub_city' => $value->sub_city,
                'ofd' =>    $value->ofd,
                'delivered' => 0,
                'undelivered' => 0,
                'returned' => 0,
                'successRate' => 0

            );


    array_push($dataArray,$data);

}
}

Я думаю, что дал достаточно, но если вам нужно больше деталей, дайте мне знать.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...