проверить данные, если равен 2 foreach php - PullRequest
0 голосов
/ 23 апреля 2020

я хочу проверить мои данные следующим образом

результат источника данных от foreach

Data Source => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17

мои данные для результата от foreach:

ID_1 => 4, 5, 6, 10, 11, 13, 15
ID_2 => 1, 2, 3, 4, 5, 6, 7, 8

как метод чтобы проверить, равен или равен id идентификатор источника данных, получится true, но если id не имеет источника данных, результат будет false?

здесь мой код для доступа к данным

        @php
            $items = array();
            foreach($activity as $a){
                $items[] = $a->id;
            }
            $list = implode(', ', $items); 
        @endphp
        Data Source => {{ $list }}


        @foreach($result as $detail_activity)
            ID_{{$detail_activity->id}}  => {{$detail_activity->ActivityDetail}}<br>
        @endforeach

с результат, подобный этому

, если мы используем эти данные в качестве примера, возможно, как

data source | id_1 | id_2 |
1             False True
2             False True
3             False True
4             True  True

, спасибо за продвижение: D

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Сначала мы создаем helper, который сообщает нам, существует ли значение в массиве sorted, используя binary search (для быстрого поиска).

Помощники. php: (добавить этот файл в папку bootstrap)

<?php

function has($needle,$haystack){
    if(!isSorted($haystack)){
        throw new Exception("Sorted array expected but unsorted array given.");
        return;
    }

    $low = 0;
    $high = count($haystack) - 1;
    while($low <= $high){
        $mid = $low + intval(($high - $low) / 2);
        if($haystack[$mid] === $needle) return true;
        if($haystack[$mid] > $needle) $high = $mid - 1;
        else $low = $mid + 1;
    }

    return false;
}

function isSorted($haystack){
    $keys = array_keys($haystack);
    foreach($keys as $index => $key){
        if($index - 1 >= 0 && $haystack[$key] < $haystack[$keys[$index-1]]){
            return false;
        }
    }
    return true;
}

Чтобы сделать эти функции доступными в вашем проекте, вам необходимо отредактировать composer.json, как показано ниже в autoload section:

 "autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "files": [
           "bootstrap/helpers.php" // <--- this line
        ]
    },

Теперь, выполните composer dump-autoload для автозагрузки этого файла.

Код блейда будет довольно простым, как показано ниже:

@foreach($data_source as $val)
    @if(has($val,$ID_1))
        <p>{{ $val }} => ID_1 true</p>
    @else
        <p>{{ $val }} => ID_1 false</p>
    @endif
    @if(has($val,$ID_2))
        <p>{{ $val }} => ID_2 true</p>
    @else
        <p>{{ $val }} => ID_2 false</p>
    @endif
@endforeach
0 голосов
/ 23 апреля 2020

Предполагая, $dataSource является массивом, например,

$dataSource = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 ];

И предполагая, $id_1 и $id_2 являются массивами, например:

$id_1 = [ 4, 5, 6, 10, 11, 13, 15 ];
$id_2 = [ 1, 2, 3, 4, 5, 6, 7, 8 ];

Чтобы определить, является ли каждый элемент в $dataSources существует в $id_1 или $id_2:

foreach ( $dataSource as $id ) {
    echo $id,
    ( in_array( $id, $id_1 ) ? 'True' : 'False' ),
    ( in_array( $id, $id_2 ) ? 'True' : 'False' ),
    "\n";
}

Лучшим способом было бы сохранить информацию в ключах из $id_1 и $id_2, а затем используйте выражение $id_1[$id], так как это будет быстрее, чем in_array().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...