2015-07-24 2 views
3

Я пытаюсь обновить приведенный ниже массив, чтобы установить "duplicate" => true, когда оба "name" и "date" совпадают. В приведенном ниже примере 'array[1][duplicate]=>true' и как array[0] & array[1] имеют тот же "name"=john & "date"=2015-7-24PHP множественные повторяющиеся значения в многомерном массиве

Array 
(
    [0] => Array 
    (
     [id] => 1 
     [name] => john 
     [date] => 2015-07-24 
     [duplicate] => false 
    ) 

    [1] => Array 
    (
     [id] => 1 
     [name] => john 
     [date] => 2015-07-24 
     [duplicate] => false 
    ) 

    [2] => Array 
    (
     [id] => 1 
     [name] => jane 
     [date] => 2015-07-24 
     [duplicate] => false 
    ) 

    [3] => Array 
    (
     [id] => 1 
     [name] => notJaneORJohn 
     [date] => 2015-07-24 
     [duplicate] => false 
    ) 

    [4] => Array 
    (
     [id] => 1 
     [name] => jane 
     [date] => 2099-07-24 
     [duplicate] => false 
    ) 

)      

ответ

2

Попробуйте это,

$array = Array 
(
    0 => Array 
    (
     'id' => '1', 
     'name' => 'john', 
     'date' => '2015-07-24', 
     'duplicate' => 'false', 
    ), 

    1 => Array 
    (
     'id' => 1, 
     'name' => 'john', 
     'date' => '2015-07-24', 
     'duplicate' => 'false' 
    ), 

    2 => Array 
    (
     'id' => 1, 
     'name' => 'jane', 
     'date' => '2015-07-24', 
     'duplicate' => 'false' 
    ), 

    3 => Array 
    (
     'id' => 1, 
     'name' => 'notJaneORJohn', 
     'date' => '2015-07-24', 
     'duplicate' => 'false' 
    ), 

    4 => Array 
    (
     'id' => 1, 
     'name' => 'jane', 
     'date' => '2099-07-24', 
     'duplicate' => 'false' 
    ) 

); 
foreach ($array as $key => $value) { 
    for ($i = $key + 1 ; $i < sizeof($array); $i++) { 
     if ($value['name'] === $array[$i]['name'] && $value['date'] === $array[$i]['date']) { 
      $array[$key]['duplicate'] = 'TRUE'; 
      $array[$i]['duplicate'] = 'TRUE'; 
     } 
    } 
} 
+0

если я закомментировать эту линию // $ Array [$ ключ] [ 'дубликата'] = 'TRUE'; он отлично работает – matt

1

Это будет работать:

$Arr = Array(
     ['id'=>1, 'name'=>'john', 'date'=>'2015-07-24', 'duplicate'=>0], 
     ['id'=>1, 'name'=>'john', 'date'=>'2015-07-24', 'duplicate'=>0], 
     ['id'=>1, 'name'=>'Jane', 'date'=>'2015-07-24', 'duplicate'=>0] 
    ); 

foreach($Arr as $i1 => $v1){ 
    $Str1 = $v1['name'].$v1['date']; 
    foreach($Arr as $i2 => $v2){ 
     if($i1 !== $i2 && $Str1 === $v2['name'].$v2['date']){ 
      $Arr[$i1]['duplicate'] = 1; 
     } 
    } 
} 

echo '<pre>',print_r($Arr),'</pre>'; die(); 

... выходы:

Array(
[0] => Array 
    (
     [id] => 1 
     [name] => john 
     [date] => 2015-07-24 
     [duplicate] => 1 
    ) 

[1] => Array 
    (
     [id] => 1 
     [name] => john 
     [date] => 2015-07-24 
     [duplicate] => 1 
    ) 

[2] => Array 
    (
     [id] => 1 
     [name] => Jane 
     [date] => 2015-07-24 
     [duplicate] => 0 
    ) 

) 
0

Посмотрите на этот метод быстрого доступа;)

<?php $testarr = array(
    array("id" => 1,"name" => "john","date" => "2015-07-24","duplicate" => "false"), 
    array("id" => 1,"name" => "john","date" => "2015-07-24","duplicate" => "false"), 
    array("id" => 1,"name" => "jane","date" => "2015-07-24","duplicate" => "false"), 
    array("id" => 1,"name" => "notJaneORJohn","date" => "2015-07-24","duplicate" => "false"), 
    array("id" => 1,"name" => "jane","date" => "2099-07-24","duplicate" => "false") 
); 
$tempArray = array(); 
function checkDuplicate(&$arr) { 
    global $tempArray; 
    if (count($tempArray) > 0 && in_array($arr['name'], $tempArray) && in_array($arr['date'], $tempArray)) { 
     $arr['duplicate'] = "true"; 
    } else { 
     $tempArray[] = $arr['name']; 
     $tempArray[] = $arr['date']; 
    } 
} 
array_walk($testarr, 'checkDuplicate'); 
print_r($testarr); 
Смежные вопросы