2016-07-19 33 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。 如果返回的數組不包含既不size也不code,添加兩個qn

0

功能array_unique()作品一維數組。要從多維數組中找到獨特的元素,我們需要做一些修改。

試試這個:

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

如果你想跟隨的另一種方法,用這個作爲參考:Create multidimensional array unique

1

它看起來對我說,你要總結上的重複數量(QN)尺寸(大小)和代碼(代碼)。實現此目的的一種方法是循環遍歷包含購物車項目的數組並構建新的數組。我建議閱讀有關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

您正在檢查類似的尺寸。但是必須檢查Size和Code兩者,然後必須增加qn並刪除一條記錄。 –

+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) { }?> 
相關問題