2016-02-09 2 views
0

У меня есть два массива, содержащих повторяющиеся значения:PHP array_diff когда есть дубликат массив значений

$test1 = Array(
     "blah1", 
     "blah1", 
     "blah1", 
     "blah1", 
     "blah2" 
    ); 

    $test2 = Array(
     "blah1", 
     "blah1", 
     "blah1", 
     "blah2" 
    ); 

Я пытаюсь получить значение массива:

$result = array_diff($test1,$test2); 

echo "<pre>"; 
print_r($result); 

Мне нужно, чтобы вернуть массив с одним значением blah1, но вместо этого он возвращает пустой массив ...

Я подозреваю, что это имеет какое-то отношение к тому, что в обоих массивах есть повторяющиеся значения, но не знаю, как исправить это. .

Пожалуйста, помогите!

EDIT:

End до написания этой функции, чтобы сделать трюк:

function subtract_array($array1,$array2){ 
    foreach ($array2 as $item) { 
     $key = array_search($item, $array1); 
     unset($array1[$key]); 
    } 
    return array_values($array1); 
} 

ответ

1

array_diff сравнивает первый array с другой array (ов), переданного в качестве параметра (ов) и return с a array, содержащий все элементы, присутствующие в первом array, которые нет ни в одном другом array s. Поскольку $test1 и $test2 как содержат "blah1" и "blah2", и никаких других ценностей, на самом деле, ожидаемое поведение array_diff является тот, который вы испытали, то есть, return пустой array, так как нет ни одного элемента в $test1, который не является присутствует в $test2.

Further read. Кроме того, прочитайте some theory, чтобы понять, с чем вы работаете.

+0

Теперь я понимаю, но что я должен использовать вместо этого, чтобы получить желаемый эффект? – Acidon

+0

Думаю, я могу перебрать test1 и удалить каждое подходящее значение в обоих массивах, но искал более элегантное решение – Acidon

+0

@Acidon, что должно быть результатом, если у вас есть 5 штук «blah1» в первом массиве без «blah2», и второй массив остается неизменным? –

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