2016-07-19 8 views
-3

同じレコードを検出して、そのレコードの数量を変更して他のレコードを削除したいと思います。たとえば、以下の配列を指定:PHPが配列内に同じレコードを見つける

'Cart' => [ 
    (int) 0 => [ 
     'size' => '38', 
     'code' => '5', 
     'qn' => (int) 1 
    ], 
    (int) 1 => [ 
     'size' => '37', 
     'code' => '5', 
     'qn' => (int) 1 
    ], 
    (int) 2 => [ 
     'size' => '37', 
     'code' => '5', 
     'qn' => (int) 1 
    ] 
], 

私が印刷したいと思います:

'Cart' => [ 
    (int) 0 => [ 
     'size' => '38', 
     'code' => '5', 
     'qn' => (int) 1 
    ], 
    (int) 1 => [ 
     'size' => '37', 
     'code' => '5', 
     'qn' => (int) 2 
    ] 

], 

答えて

0

私はそれがあなたの問題のために十分である知っているが、あなたの配列を繰り返し処理機能array_unique

+0

Array_uniqueは重複データを削除します。私は、類似したレコードがいくつあるかを数え、数量を更新する必要があります。見てください、secod配列の変更でqn。 –

0

を試してみてはいけません各サブアレイにarray_diffを使用してください。 返される配列が含まれていない場合はどちらsizecode、2 qn

0

関数に1次元配列のためのarray_unique()作品を追加します。多次元配列から一意の要素を見つけるには、少し修正する必要があります。

これを試してください:あなたは別のアプローチをフォローしたい場合は

$array = array_map("serialize", $array); 
$output = array_map("unserialize", array_unique($array)); 

は、リファレンスとしてこれを使用する:Create multidimensional array unique

1

それはあなたが重複した上での数量(QN)を合計しようとしているように私には見えますサイズ(サイズ)とコード(コード)。これを達成する1つの方法は、カート項目を含む配列をループし、新しい配列を構築することです。私は約PHP arraysarray_key_existsそれらは以下で使用しているとして、より多くを学ぶために読んでお勧め:

<?php 

$arr = [ 
    ['size' => '38', 'code' => 5, 'qn' => 1], 
    ['size' => '37', 'code' => 5, 'qn' => 1], 
    ['size' => '37', 'code' => 5, 'qn' => 1], 
    ['size' => '37', 'code' => 4, 'qn' => 1], 
]; 

$newArr = []; 

foreach ($arr as $value) { 
    $key = $value['size'] . ':' . $value['code']; 

    if (array_key_exists($key, $newArr)) { 
     $newArr[$key]['qn'] += $value['qn']; 
     continue; 
    } 

    $newArr[$key] = $value; 
} 

// Resets keys 
$newArr = array_values($newArr); 

print_r($newArr); 
+0

あなたは同様のサイズをチェックしています。しかし、サイズとコードの両方をチェックしてから、qnを増やして1つのレコードを削除する必要があります。 –

+0

最新の回答をご覧ください。ありがとう! – anFfWuy7qbJWaPp6DSOR

0

を次のコードを通過してください。

$result = [ 
     0=> ['size' => '38', 
       'code' => '5', 
       'qn' => 1 
      ], 
     1=> ['size' => '37', 
       'code' => '5', 
       'qn' => 1 
      ], 
     2=> ['size' => '37', 
       'code' => '5', 
       'qn' => 1 
      ] 
    ]; 

$finalArr = []; 
foreach($result as $k => $v) { 
    $flag = 0; 
    foreach($finalArr as $kc => $vc){ 
     if($v['size']==$vc['size'] && $v['code']==$vc['code']){ 
      $flag = 1; 
      $finalArr[$kc]['qn'] = $finalArr[$kc]['qn'] + 1; 
      break; 
     } 
    } 
    if($flag==0){ 
     $finalArr[] = 
     [ 
      'size' => $v['size'], 
      'code' => $v['code'], 
      'qn' => 1 
     ]; 
    }  
} 
echo "<pre>"; 
print_r($finalArr); 
0

コードはあなたの質問に対してテストされており、私はコードを説明しました。これにより、必要な数量(qn)の配列要素と配列要素を任意の数だけ増やすことができます。

<?php 
//Compare the 1st and 2nd array 
//Compare the 2st and 3rd array 
// and so on 
function compare($arr1 = array(), $arr2 = array()) {   
    $result = array_diff($arr1, $arr2); 
    return $result; 
} 

$cart = array(
     0 => array('size' => 38, 'code' => 5, 'qn' => 1), 
     1 => array('size' => 37, 'code' => 5, 'qn' => 1), 
     2 => array('size' => 37, 'code' => 5, 'qn' => 1), 
     ); 
$j = 1; 
$cart_total_count = count($cart);//Gives the count of your cart 
$final_cart = array();//Final array with qn incremented 
for($i=0;$i<$cart_total_count; $i++) { 
    if (!empty($cart[$i+1])) {//If 2nd array is not present then stop the comparision 
     if (empty(compare($cart[$i], $cart[$i+1]))){ 
      $j++; 
      $cart[$i]['qn'] = $j;      
      $final_cart = $cart[$i];    
     } 
    } 
}var_dump($final_cart); 
//Output 
//1. If 2 array are same 
//array(3) { ["size"]=> int(37) ["code"]=> int(5) ["qn"]=> int(2) } 
//2. If no array are same 
//array(0) { }?> 
関連する問題