один массив "минус" другой

alexblade

Новичок
имеется один общий массив с числовыми значениями. имеется один уник массив от общего (только с уникальными). мне нужен третий массив "разница" между общим и уником. правильно я понял что с этой задачей справляется array_diff_assoc ?

$unique = array_unique($all);
//print_r($all);
//print_r($unique);
$diff = array_diff_assoc($all, $unique);
$count = array_count_values($diff);
print_r($count);
 

Вурдалак

Продвинутый новичок
Выясни хотя бы для себя что ты подразумеваешь под разницей двух таких массивов.
 

alexblade

Новичок
Array All: 1,2,1,5,9,9,0
Array Uni: 1,2,5,9,0

A-U: 1,9

Про разницу, я хочу увидеть последний где 1,9 все то что не попало в уник.
?
 

Вурдалак

Продвинутый новичок
PHP:
$tmp = array();
$out = array();

foreach ($arr as $idx => $value) {
	if (isset($tmp[$value]))
		$out[$idx] = $value;
	else
		$tmp[$value] = $value;
}
 
  • Like
Реакции: eax

eax

#
PHP:
$result = array_diff_assoc($all, array_unique($all));
Выдает тот же результат. Но вариант Вурдалака получается производительнее.
 

eax

#
Не знаю, вот как я проверил
PHP:
$all = array(1, 2, 1, 5, 9, 9, 0);

$result = array_diff_assoc($all, array_unique($all));

print_r($result); //Array ( [2] => 1 [5] => 9 )
PHP:
$all = array(1, 2, 1, 5, 9, 9, 0);
$tmp = array();
$out = array();

foreach ($all as $idx => $value) {
    if (isset($tmp[$value]))
        $out[$idx] = $value;
    else
        $tmp[$value] = $value;
} 

print_r($out); //Array ( [2] => 1 [5] => 9 )
 

Вурдалак

Продвинутый новичок
А, я не учёл, что array_unique() сохраняет индексы. Там всё равно по смыслу array_diff_key() подходит больше.
 

alexblade

Новичок
Ну да сохраняет индексы хотя они мне не важны и после пару тестов разницы не увидел потому и остановился на варианте с первого поста. Значит все у меня верно?
 

hell0w0rd

Продвинутый новичок
Ну да сохраняет индексы хотя они мне не важны и после пару тестов разницы не увидел потому и остановился на варианте с первого поста. Значит все у меня верно?
тут видео проскакивало...
Тесты напиши :)
 

alexblade

Новичок
Смотрим в книгу фидим фигу ;)
Цитата: после пару тестов.

А тесты вообще не всегда все отлавливают, потому после них лучше еще справиться у коллективного разума имхо
 
Сверху