2016-07-19 2 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 удалит повторяющиеся данные. Мне нужно подсчитать, сколько там одинаковых записей и чем количество обновлений. Посмотрите, qn в изменениях массива secod. –

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 arrays и array_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 и удалить одну запись. –

+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) { }?> 

 Смежные вопросы

  • Нет связанных вопросов^_^