Я пытаюсь избежать дублирования в задачах "Мой блейд" с помощью этого кода
Я отредактировал свой вопрос, поэтому я добавил контроллер и полный код лезвия
Мой Контроллер
$posts2 = Path::with(['pathtags' => function ($q) use ($TagArray)
{$q->with(['Tasks' => function ($q) use ($TagArray) {$q->has('tasktags', '=', 2)
->with('tasktags');
}]);
}])->where('id', '=', 1)->get();
Мой клинок
@foreach ($posts2 as $item)
<h2> {{$item->name}}</h2>
@foreach ($item->pathtags as $Tag)
@foreach ($Tag->Tasks as $Task)
@php $a=array(); @endphp
@if (in_array($Task->task_name,$a))
<li> Task :: {{ $Task->task_name }} </li>
@php
array_push($a,"$Task->task_name");
@endphp
@else {
<li> Task :: Not Found </li>
}
@endif
@endforeach
@endforeach
@endforeach
Нет, это массив отношений
Разве вы не можете использовать стандартный PHP array_count_values?
Нет, я не могу, пожалуйста, проверьте Мой другой вопрос stackoverflow.com/questions/53020431/…
Измените это
array_push($a,"$Task->task_name");
с участием
array_push($a, $Task->task_name);
// or
$a[] = $Task->task_name;
Не рабочий идентификатор сделал dd ($ a), и я получил пустой массив
вы очищаете массив на каждой итерации. переместить инициализацию массива перед циклом foreach. кроме того, вся логика неверна. вы проверяете, существует ли элемент в массиве, и если да, добавьте его снова.
@php $a=array(); @endphp
@foreach ($Tag->Tasks as $Task)
@if (!in_array($Task->task_name,$a))
<li> Task :: {{ $Task->task_name }} </li>
@php
array_push($a,$Task->task_name);
@endphp
@else
<li> Task :: Duplicated </li>
@endif
@endforeach
Тем не менее я получаю пустой массив
ОК На этот раз ошибок нет, но он возвращает дублированные задачи, хотя он возвращается, если не иначе, поэтому я думаю, что мы что-то упустили
я не понимаю. какой желаемый результат вы не получаете с этим? если вы просто хотите показать уникальные задачи, вы можете полностью удалить раздел @else
очищается массив после получения задач из тега
У меня есть и я добавил полный код лезвия
Я все еще не понимаю, что вы хотите в своем выводе, но, возможно, вам следует поставить инициализацию $ a еще выше и перед всеми циклами foreach, если вы ВООБЩЕ не хотите, чтобы какое-либо повторяющееся имя задачи
В стандартном PHP вы можете использовать array_count_values, чтобы получить количество элементов каждого массива.
Затем используйте array_diff или array_intersect, чтобы получить различные уникальные или повторяющиеся элементы. Array_keys возвращает значения из исходного массива.
$arr = ["one", "one", "two", "two", "three"];
$count = array_count_values($arr);
echo "duplicates \n";
var_dump(array_keys(array_diff($count, [1])));
echo "uniques \n";
var_dump(array_keys(array_intersect($count, [1])));
$ tag - это коллекция?