0

次の配列があります。

Array
(
    [0] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55
        )

    [1] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55
        )

    [2] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55
        )

    [3] => Array
        (
            [Vendor_ID] => 3
            [Quantity] => 
        )

    [4] => Array
        (
            [Vendor_ID] => 3
            [Quantity] => 
        )

    [5] => Array
        (
            [Vendor_ID] => 3
            [Quantity] => 
        )

    [6] => Array
        (
            [Vendor_ID] => 4
            [Quantity] => 
        )

    [7] => Array
        (
            [Vendor_ID] => 4
            [Quantity] => 
        )

    [8] => Array
        (
            [Vendor_ID] => 4
            [Quantity] => 
        )

)

次のコードで作成されています。

$Display_Arr = array();
        $Tick = 0;
    foreach ($_POST['product'] AS $_1){
        if (!in_array($_1['vendor_id'], $Display_Arr)){
            $Display_Arr[$Tick] = array(
                "Vendor_ID" => $_1['vendor_id'],
                "Quantity" => ""
            );
            $Display_Arr[$Tick]["Quantity"] .= $_1['quantity']; 
        }else{
            $Display_Arr[$Tick]["Quantity"] .= $_1['quantity']; 
        }
        ++$Tick;
    }
    echo "<pre>";
    print_r($Display_Arr);
    echo "</pre>";

しかし、次のような目的の出力が得られません。

Array
(
    [0] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55,55,55
        )


    [1] => Array
        (
            [Vendor_ID] => 3
            [Quantity] => 
        )


    [2] => Array
        (
            [Vendor_ID] => 4
            [Quantity] => 
        )

)

これのどこが間違っているのですか?

@マシエロ

現在の出力は次のとおりです。

Array
(
    [1] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55
        )

    [3] => Array
        (
            [Vendor_ID] => 3
            [Quantity] => 
        )

    [4] => Array
        (
            [Vendor_ID] => 4
            [Quantity] => 
        )

)

一方、私は取得しようとしています:

    [0] => Array
        (
            [Vendor_ID] => 1
            [Quantity] => 55,55,55
        )
4

3 に答える 3

1

これを解決する最も簡単な方法は、最初にベンダーの数量を集計してから、使用しているキーを使用して最終的な配列を構築することです。

入力は次のようになると想定しています。

$_POST['product'] = [
    ['vendor_id' => 1, 'quantity' => 55],
    ['vendor_id' => 1, 'quantity' => 55],
    ['vendor_id' => 1, 'quantity' => 55],
    ['vendor_id' => 3, 'quantity' => null],
    ['vendor_id' => 3, 'quantity' => null],
    ['vendor_id' => 3, 'quantity' => null],
    ['vendor_id' => 4, 'quantity' => null],
    ['vendor_id' => 4, 'quantity' => null],
    ['vendor_id' => 4, 'quantity' => null],
];

数量の集計:

$aggregates = [];
foreach ($_POST['product'] as $product) {
    $id = $product['vendor_id'];
    if ( ! isset($aggregates[$id])) {
        $aggregates[$id] = [];
    }
    if ($product['quantity'] > 0) {
        $aggregates[$id][] = $product['quantity'];
    }
}

集計配列は次のようになります。

$aggregates = [
    1 => [
        0 => 55,
        1 => 55,
        2 => 55,
    ],
    3 => [], // Empty
    4 => [], // Empty
];

ご覧のとおり、データはきちんと整理されており、必要な形式に変換する準備ができています。質問で使用するキーを使用すると、次のように簡単になります。

$output = [];
foreach ($aggregates as $vid => $qty) {
    $quantity = implode(',', $qty);
    $output[] = ['Vendor_ID' => $vid, 'Quantity' => $quantity];
}

出力は次のようになります。

$output = [
    ['Vendor_ID' => 1, 'Quantity' => '55,55,55'],
    ['Vendor_ID' => 3, 'Quantity' => ''],
    ['Vendor_ID' => 4, 'Quantity' => ''],
];
于 2013-10-17T00:46:53.743 に答える
0

最後の回答(Sverri M. Olsen)の出力の方が便利ですが、これは探しているものを正確に出力します。ここでは数量を文字列として取得しますが、Sverri の方法では最初に配列を取得します。

$Display_Arr = array();
$vendors=array();
foreach ($_POST['product'] AS $_1){

  if (!in_array($_1['vendor_id'],$vendors)){
    $vendors[]=$_1['vendor_id'];
    $Display_Arr[sizeof($vendors)-1] = array(
      "Vendor_ID" => $_1['vendor_id'],
      "Quantity" => $_1['quantity']
    );
  }
  else{
    $vendorKey=array_search($_1['vendor_id'],$vendors);
    $Display_Arr[$vendorKey]["Quantity"] .=(!empty($Display_Arr[$vendorKey]["Quantity"])?',':null).$_1['quantity'];
  }
}
于 2013-10-17T14:14:11.387 に答える