Добавить элементы в массив внутри цикла foreach

Я пытаюсь избежать дублирования в задачах "Мой блейд" с помощью этого кода

Я отредактировал свой вопрос, поэтому я добавил контроллер и полный код лезвия

Мой Контроллер

    $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

$ tag - это коллекция?

Teoman Tıngır 27.10.2018 13:06

Нет, это массив отношений

Kareem Elsharkawy 27.10.2018 13:09

Разве вы не можете использовать стандартный PHP array_count_values?

Andreas 27.10.2018 13:10

Нет, я не могу, пожалуйста, проверьте Мой другой вопрос stackoverflow.com/questions/53020431/…

Kareem Elsharkawy 27.10.2018 13:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
208
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Измените это

array_push($a,"$Task->task_name");

с участием

array_push($a, $Task->task_name);
// or
$a[] = $Task->task_name;

Не рабочий идентификатор сделал dd ($ a), и я получил пустой массив

Kareem Elsharkawy 27.10.2018 13:08
Ответ принят как подходящий

вы очищаете массив на каждой итерации. переместить инициализацию массива перед циклом 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

Тем не менее я получаю пустой массив

Kareem Elsharkawy 27.10.2018 13:14

ОК На этот раз ошибок нет, но он возвращает дублированные задачи, хотя он возвращается, если не иначе, поэтому я думаю, что мы что-то упустили

Kareem Elsharkawy 27.10.2018 13:35

я не понимаю. какой желаемый результат вы не получаете с этим? если вы просто хотите показать уникальные задачи, вы можете полностью удалить раздел @else

Fatemeh Majd 27.10.2018 13:37

очищается массив после получения задач из тега

Kareem Elsharkawy 27.10.2018 13:44

У меня есть и я добавил полный код лезвия

Kareem Elsharkawy 27.10.2018 13:57

Я все еще не понимаю, что вы хотите в своем выводе, но, возможно, вам следует поставить инициализацию $ a еще выше и перед всеми циклами foreach, если вы ВООБЩЕ не хотите, чтобы какое-либо повторяющееся имя задачи

Fatemeh Majd 27.10.2018 14:00

В стандартном 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])));

https://3v4l.org/DKIbZ

Другие вопросы по теме