在查询循环中构建一个具有相同ID的字符串Concat数组

时间:2017-11-10 03:02:25

标签: php arrays foreach concat

我在for循环中有一个查询,它获取每个数组元素的产品名称。现在在我的数组的每个元素中,我有一个ID,我想用相同的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;    
    }

我在做什么,我得到了第一个发货ID并存储它,如果他们是相同的我做了一个条件然后我去concat产品名称,但是,我看到我的逻辑是坏的。

请以其他方式帮助我。像这行代码开头:

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;    
}

1 个答案:

答案 0 :(得分:1)

根据您的实际数据进行调整,如果您有任何疑问,请与我们联系。

<?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 );
?>