Построение строкового массива Concat с тем же идентификатором внутри цикла запроса

у меня есть запрос внутри цикла for, который получает имя продукта каждого элемента массива. Теперь в каждом элементе моего массива у меня есть идентификатор, в котором я хочу объединить все названия продуктов с одинаковым идентификатором shipping_id.

Здесь у меня есть массив с такими значениями:

Имя массива:id со значениями:

Array
(
[0] => Array
(
[product_id] => 1
[shipping_id] => 1
)
[1] => Array
(
[product_id] => 2
[shipping_id] => 1
)

[2] => Array
(
[product_id] => 1
[shipping_id] => 2
)
)

Теперь я сделал этот код с этими:

   $first = true;
$temp_ship_id = "";
$product_list = "";
foreach ($ids as $product) {
$productname = $this->getproductname($product[0][product_id]);
// if($first) {
//     $temp_ship_id = $product[0][shipping_id];
//     $first = false;
// }
// if($product[0][shipping_id] == $temp_ship_id) {
//     $product_list .= $productname.";
// } else {
//     $product_list .= $productname.";
//     //$product_list = "";
//     $temp_ship_id = $product[0]->shipping_id;
// }
}

public function getproductname($product_id) {
$product = DB::table('products')->select('product_name')
->where(['products.product_id'=>$product_id])
->first();return $product->product_name;
}

Что я делаю, так это то, что я получаю первый идентификатор доставки и сохраняю его, и я поставил условие, если они одинаковые, тогда я согласен с именем продукта, но я вижу, что моя логика плохая.

Пожалуйста, помогите мне в другом. Что-то вроде этой строки кода для начала:

foreach ($ids as $product) {
$productname = $this->getproductname($product[0][product_id]);
//code for concat goes here
}

public function getproductname($product_id) {
$product = DB::table('products')->select('product_name')
->where(['products.product_id'=>$product_id])
->first();return $product->product_name;
}

0

Решение

Отрегулируйте ниже свои фактические данные, дайте мне знать, если у вас есть вопросы.

<?php
$concat = array();
$array  = array( array( 'product_id'=>1, 'shipping_id'=>1, 'product_name' => 'a' ), array( 'product_id'=>2, 'shipping_id'=>1, 'product_name' => 'b' ), array( 'product_id'=>3, 'shipping_id'=>2, 'product_name' => 'c' ), array( 'product_id'=>4, 'shipping_id'=>1, 'product_name' => 'd' ) );
foreach( $array as $row ) {
if( isset( $concat[ $row['shipping_id'] ] ) ) {
$concat[ $row['shipping_id'] ] .= ',' . $row['product_name'];
} else {
$concat[ $row['shipping_id'] ] .= $row['product_name'];
}
}
var_dump( $concat );
?>
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector