Как сравнить два массива, которые содержат данные пользователя в виде массива, и удалить соответствующие элементы из одного массива?

У меня есть два массива $a а также $b содержащий «данные пользователя» в массивах.

Ниже приведена его структура (т.е. print_r())

print_r($a);

Array
(
[0] => Array
(
[user_id] => 109
[profile_page_id] => 0
[user_name] => profile-109
[full_name] => Hiten Patel
[gender] => 0
[user_image] =>
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile_100.png
)
[1] => Array
(
[user_id] => 1585
[profile_page_id] => 0
[user_name] => profile-1585
[full_name] => Sushil Kadam
[gender] => 0
[user_image] => 1585%s.jpg
[is_invisible] => 0
[user_group_id] => 7
[language_id] =>
[profile_image] => http://app.campusknot.com/file/pic/user/1585_100_square.jpg
)

[2] => Array
(
[user_id] => 185
[profile_page_id] => 0
[user_name] => profile-185
[full_name] => Perceus Mody
[gender] => 1
[user_image] => 185%s.peg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/file/pic/user/185_100_square.peg
)

[3] => Array
(
[user_id] => 196
[profile_page_id] => 0
[user_name] => profile-196
[full_name] => Ira Hampton
[gender] => 1
[user_image] => 2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile.png
)

[4] => Array
(
[user_id] => 244
[profile_page_id] => 0
[user_name] => profile-244
[full_name] => Hiten Patel
[gender] => 2
[user_image] => 244%s.cza
[is_invisible] => 0
[user_group_id] => 7
[language_id] =>
[profile_image] => http://app.campusknot.com/file/pic/user/244_100_square.cza
)
)

Второй массив выглядит следующим образом:

print_r($b);


Array
(
[0] => Array
(
[user_id] => 244
[profile_page_id] => 0
[user_server_id] => 0
[user_name] => profile-244
[full_name] => Hiten Patel
[gender] => 2
[user_image] => 244%s.cza
[is_invisible] => 0
[user_group_id] => 7
[language_id] =>
)

[1] => Array
(
[user_id] => 1585
[profile_page_id] => 0
[user_server_id] => 0
[user_name] => profile-1585
[full_name] => Sushil Kadam
[gender] => 0
[user_image] => 1585%s.jpg
[is_invisible] => 0
[user_group_id] => 7
[language_id] =>
)

)

Теперь я хочу сравнить два массива $a and $b и наконец я хочу изысканный массив $a который не будет содержать общих элементов массива следующим образом (ключи массива должны начинаться с 0 и увеличиваться на 1).

print_r($a); //after refinement, the desired output array

Array
(
[0] => Array
(
[user_id] => 109
[profile_page_id] => 0
[user_name] => profile-109
[full_name] => Hiten Patel
[gender] => 0
[user_image] =>
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile_100.png
)
[1] => Array
(
[user_id] => 185
[profile_page_id] => 0
[user_name] => profile-185
[full_name] => Perceus Mody
[gender] => 1
[user_image] => 185%s.peg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/file/pic/user/185_100_square.peg
)
[2] => Array
(
[user_id] => 196
[profile_page_id] => 0
[user_name] => profile-196
[full_name] => Ira Hampton
[gender] => 1
[user_image] => 2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile.png
)
)

Для достижения этого желаемого результата вывода я попытался следующий код, но не смог получить желаемый уточненный результат вывода, как я ожидал.

//My attempted code
$a = $result=array_diff($a,$b);

Я тоже пробовал array_diff_assoc() функция, но это также не дало мне желаемый результат.

Может ли кто-нибудь, пожалуйста, направить меня в этом отношении, чтобы получить желаемый результат?

3

Решение

Вернуть массив, содержащий разницу между двумя предоставленными списками пользователей.

1) Даны два массива:

  • полный список пользователей ($ userListA)
  • обязательный список пользователей ($ userListB)

Создайте массив, содержащий пользователей, которые находятся в $ userListA, но не в $ userListB.

рабочий пример — eval.in; Исходный код — pastebin

Существует более эффективная версия, которая будет быстрее в больших массивах. Он использует массив «ключом» на user_id так что можете проверить на отсутствие без сканирования всего массива. pastebin — сравни массив для отсутствующего пользователя — быстро

код:

/*
* This version is simple but will be slow for large arrays...
*
* Hmm... I may want to do a more efficient version later,  so I will use a
*        compare function now, so that I can easily change it later.
*/

/*
* Out Array:
*    1) In $userListA but not in $userListB
*/
$diffAfromB = array();

// check the input user list...
foreach ($userListA as $userA) {

// find the userA details in Array B
if (!matchUserAinB($userA, $userListB)) {
$diffAfromB[] = $userA;
}
}

// show otput...
var_dump($diffAfromB);

exit;

// -------------------------------------------------------------------------
/**
* Check if userA exists in userListB
*
* @param array $userA
* @param array $userListB
* @return boolean
*/
function matchUserAinB($userA, array $userListB)
{
$found = false;

foreach ($userListB as $userB) {
if ($userB['user_id'] === $userA['user_id']) {
$found = true;
break;
}
}
return $found;
}

Выход:

array
0 =>
array
'user_id' => string '109' (length=3)
'profile_page_id' => string '0' (length=1)
'user_name' => string 'profile-109' (length=11)
'full_name' => string 'Hiten Patel' (length=11)
'gender' => string '0' (length=1)
'user_image' => string '\"\"' (length=4)
'is_invisible' => string '0' (length=1)
'user_group_id' => string '6' (length=1)
'language_id' => string '0' (length=1)
'profile_image' => string 'http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile_100.png' (length=92)
1 =>
array
'user_id' => string '185' (length=3)
'profile_page_id' => string '0' (length=1)
'user_name' => string 'profile-185' (length=11)
'full_name' => string 'Perceus Mody' (length=12)
'gender' => string '1' (length=1)
'user_image' => string '185%s.peg' (length=9)
'is_invisible' => string '0' (length=1)
'user_group_id' => string '6' (length=1)
'language_id' => string '0' (length=1)
'profile_image' => string 'http://app.campusknot.com/file/pic/user/185_100_square.peg' (length=58)
2 =>
array
'user_id' => string '196' (length=3)
'profile_page_id' => string '0' (length=1)
'user_name' => string 'profile-196' (length=11)
'full_name' => string 'Ira Hampton' (length=11)
'gender' => string '1' (length=1)
'user_image' => string '2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg' (length=46)
'is_invisible' => string '0' (length=1)
'user_group_id' => string '6' (length=1)
'language_id' => string '0' (length=1)
'profile_image' => string 'http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile.png' (length=88)

Данные теста:

$sA = 'a:5:{i:0;a:10:{s:7:"user_id";s:3:"109";s:15:"profile_page_id";s:1:"0";s:9:"user_name";s:11:"profile-109";s:9:"full_name";s:11:"Hiten Patel";s:6:"gender";s:1:"0";s:10:"user_image";s:4:"\"\"";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"6";s:11:"language_id";s:1:"0";s:13:"profile_image";s:92:"http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile_100.png";}i:1;a:10:{s:7:"user_id";s:4:"1585";s:15:"profile_page_id";s:1:"0";s:9:"user_name";s:12:"profile-1585";s:9:"full_name";s:12:"Sushil Kadam";s:6:"gender";s:1:"0";s:10:"user_image";s:10:"1585%s.jpg";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"7";s:11:"language_id";s:1:"0";s:13:"profile_image";s:59:"http://app.campusknot.com/file/pic/user/1585_100_square.jpg";}i:2;a:10:{s:7:"user_id";s:3:"185";s:15:"profile_page_id";s:1:"0";s:9:"user_name";s:11:"profile-185";s:9:"full_name";s:12:"Perceus Mody";s:6:"gender";s:1:"1";s:10:"user_image";s:9:"185%s.peg";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"6";s:11:"language_id";s:1:"0";s:13:"profile_image";s:58:"http://app.campusknot.com/file/pic/user/185_100_square.peg";}i:3;a:10:{s:7:"user_id";s:3:"196";s:15:"profile_page_id";s:1:"0";s:9:"user_name";s:11:"profile-196";s:9:"full_name";s:11:"Ira Hampton";s:6:"gender";s:1:"1";s:10:"user_image";s:46:"2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"6";s:11:"language_id";s:1:"0";s:13:"profile_image";s:88:"http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile.png";}i:4;a:10:{s:7:"user_id";s:3:"244";s:15:"profile_page_id";s:1:"0";s:9:"user_name";s:11:"profile-244";s:9:"full_name";s:11:"Hiten Patel";s:6:"gender";s:1:"2";s:10:"user_image";s:9:"244%s.cza";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"7";s:11:"language_id";s:1:"0";s:13:"profile_image";s:58:"http://app.campusknot.com/file/pic/user/244_100_square.cza";}}';
$userListA = unserialize($sA);

$sB = 'a:2:{i:0;a:10:{s:7:"user_id";s:3:"244";s:15:"profile_page_id";s:1:"0";s:14:"user_server_id";s:1:"0";s:9:"user_name";s:11:"profile-244";s:9:"full_name";s:11:"Hiten Patel";s:6:"gender";s:1:"2";s:10:"user_image";s:9:"244%s.cza";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"7";s:11:"language_id";s:1:"0";}i:1;a:10:{s:7:"user_id";s:4:"1585";s:15:"profile_page_id";s:1:"0";s:14:"user_server_id";s:1:"0";s:9:"user_name";s:12:"profile-1585";s:9:"full_name";s:12:"Sushil Kadam";s:6:"gender";s:1:"0";s:10:"user_image";s:10:"1585%s.jpg";s:12:"is_invisible";s:1:"0";s:13:"user_group_id";s:1:"7";s:11:"language_id";s:1:"0";}}';
$userListB = unserialize($sB);
2

Другие решения

Вы можете использовать его, но изменить индексы в соответствии с вашим массивом, это всего лишь пример того, как вы можете решить вашу проблему:

$a = array(
array('userid'=>109,
'profile_img'=>0,
'username'=>'test',
'lang'=>0),
array('userid'=>10,
'profile_img'=>0,
'username'=>'test2',
'lang'=>0),
array('userid'=>101,
'profile_img'=>0,
'username'=>'test',
'lang'=>0),
);
$b = array(
array('userid'=>100,
'profile_img'=>0,
'username'=>'test',
'lang'=>0),
array('userid'=>1011,
'profile_img'=>0,
'username'=>'test2',
'lang'=>0),
array('userid'=>101,
'profile_img'=>0,
'username'=>'test',
'lang'=>0),
);



$newArr1 = array();

foreach ($a as $key => $value) {
$newArr1[$value['userid']] = $value;
}

foreach ($b as $key => $value) {
$newArr2[$value['userid']] = $value;
}
echo "<pre>";
$diffArr1 = array_diff_key($newArr1, $newArr2);
$diffArr2 = array_diff_key($newArr2, $newArr1);

$finalArr = array_merge($diffArr1,$diffArr2);
print_r($finalArr);

Результат выглядит так:

Array
(
[0] => Array
(
[userid] => 109
[profile_img] => 0
[username] => test
[lang] => 0
)

[1] => Array
(
[userid] => 10
[profile_img] => 0
[username] => test2
[lang] => 0
)

[2] => Array
(
[userid] => 100
[profile_img] => 0
[username] => test
[lang] => 0
)

[3] => Array
(
[userid] => 1011
[profile_img] => 0
[username] => test2
[lang] => 0
)

)
0

прежде всего я даю $output $a чтобы получить все элементы в $a

после этого я сравниваю это с $b и удалите существующее значение в $output

    $output = $a;
foreach ($b as $k => $v) {
$exists = false;
foreach($output as $key => $value) {
if ($v == $value) {
unset($output[$key]);
$exists = true;
break;
} else {
continue;
}
}
if (!$exists) {
$output[] = $v;
}
}
echo '<pre>';
print_r($output);
echo '</pre>';

РЕЗУЛЬТАТ

    Array
(
[0] => Array
(
[user_id] => 109
[profile_page_id] => 0
[user_name] => profile-109
[full_name] => Hiten Patel
[gender] => 0
[user_image] =>
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile_100.png
)
[1] => Array
(
[user_id] => 185
[profile_page_id] => 0
[user_name] => profile-185
[full_name] => Perceus Mody
[gender] => 1
[user_image] => 185%s.peg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/file/pic/user/185_100_square.peg
)
[2] => Array
(
[user_id] => 196
[profile_page_id] => 0
[user_name] => profile-196
[full_name] => Ira Hampton
[gender] => 1
[user_image] => 2014/11/24c4a6835e667b67b82cea3666841ac7%s.jpg
[is_invisible] => 0
[user_group_id] => 6
[language_id] =>
[profile_image] => http://app.campusknot.com/theme/frontend/foxplus/style/default/image/noimage/profile.png
)
)
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector