Добавить элементы в массив внутри цикла foreach - PullRequest
0 голосов
/ 27 октября 2018

пытаюсь не дублироваться в задачах My blade, используя этот код

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

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

    $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

Ответы [ 3 ]

0 голосов
/ 27 октября 2018

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

В наличии 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

0 голосов
/ 27 октября 2018

Изменить это

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

с

array_push($a, $Task->task_name);
// or
$a[] = $Task->task_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...