#php
#php
Вопрос:
Я работаю над небольшим php-скриптом, в настоящее время у меня есть массив, подобный этому
[0] yassine#m, [1] yassine#f, [2] Dolmi#m , [3] yassine#l
Я хочу, чтобы PHP проверил, есть ли дублированный элемент (в данном случае yassine), и вернул что-то вроде этого.
[0] yassine , [1] Dolmi#m
array_unique не будет работать. И я действительно не имею ни малейшего представления, как это решить. Если искал решение в Интернете, но, похоже, не нашел его. Кто-нибудь может помочь, пожалуйста?
Комментарии:
1. Так вы хотите просто
yassine
потому что их несколькоyassine
или [2] должно бытьDolmi
? Почему не сработал бы стандартный цикл foreach с использованием substr?2. Существует несколько yassine с 3 разными тегами (#m, # f, # l), поэтому я хочу, чтобы всякий раз, когда есть одно и то же значение с разными тегами, все они должны быть удалены и сохранить значение без тегов. и если есть значение с одним тегом, его следует просто сохранить.
Ответ №1:
Я думаю, это может сработать для вас.
Сначала отсортируйте массив по значению, затем используйте комбинацию substr(), strpos()
и array_push()
для создания нового массива в соответствии с вашими потребностями, затем удалите повторяющееся значение с помощью array_unique()
<?php
$oldarray = array("suman#1","suman#2","suman#3","sujan#1","suresh#2","");
// first sort array by value so matching value comes together
asort($oldarray);
$newarray = array();
$count = count($oldarray);
for($i=0; $i < $count-1; $i ){
$a = $oldarray[$i];
$b = $oldarray[$i 1];
if($i == 0)
$c = "";
else
$c = $oldarray[$i-1];
if(substr($a,0,strpos($a,"#")) == substr($b,0,strpos($b,"#")) || substr($a,0,strpos($a,"#")) == substr($c,0,strpos($c,"#")) ){
array_push($newarray,substr($a,0,strpos($a,"#")));
}
else
array_push($newarray,$a);
}
print_r($oldarray);
// now remove duplicate value from new array
$newarray = array_unique($newarray);
print_r($newarray);
?>
Ответ №2:
Проверьте следующее решение
<?php
function generateUniqueList ($arr){
$ret = array();
foreach ($arr as $value) {
$key = explode("#", $value)[0];
if (array_key_exists($key, $ret)) {
$ret[$key] = $key;
}
else {
$ret[$key] = $value;
}
}
return array_values($ret);
}
$arr = array("yassine#m","yassine#f","Dolmi#m", "yassine#l");
$list = generateUniqueList ($arr);
print_r($list);