Проверка, является ли массив в массиве пустым / пустым в PHP - PullRequest
1 голос
/ 16 апреля 2019

Я проверяю массив, если он содержит несколько вещей и массив внутри него пуст.Как мне добиться этого?

Я пытался проверить его на empty, inArray и обычное условие в if.

Снимок экрана массива (assignedTo, которыйдолжен быть нулевым / пустым для того, чтобы if было истинным):

enter image description here

for($i = 1; $i < $this->pages['maxPages']+1; $i++) {            
        $response = $this->client->get('v1/tickets/search.json', [
            'query' => ['page' => $i, 'assignedTo[]' => null, 'statuses[]' => 'active', 'waiting', 'sortDir' => 'desc', 'sortBy' => 'updatedAt']
        ]);

        //Verwekt de data gekregen van de API
        $json = (string)$response->getBody()->getContents();
        $decoded = json_decode($json, true);

        //Haalt de lengte van de result array op
        $arrayLength = sizeof($decoded['tickets']);

        //Slaat de resultaten op in de bijbehorende variabele. De if statement loopt nog na of de tickets écht aan de filters voldoen. Het komt nog wel eens voor dat er tickets worden opgehaald die niet opgehaald moeten worden volgens de filters.
        for($int = 0; $int < $arrayLength; $int++) {
            if($decoded['tickets'][$int]['status'] === 'active' || $decoded['tickets'][$int]['status'] === 'waiting on customer' && empty($decoded['tickets'][$int]['assignedTo'])) {                    
                $newticketamount++;
                $activetickets[] = $decoded['tickets'][$int];
            }
        }
    }

Итак, я хочу, чтобы if выполнялся, когда$decoded['tickets'][$int]['assignedTo'] пусто.В настоящее время у него есть как билеты, которые назначены, так и те, которые нет.

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Empty работает отлично, я думаю, что проблема в логических операторах и их порядке

Вам нужно поставить туда круглые скобки

if (($decoded['tickets'][$int]['status'] === 'active' || $decoded['tickets'][$int]['status'] === 'waiting on customer') && empty($decoded['tickets'][$int]['assignedTo'])) {                    

Это проверит, если статус active илиwaiting on customer И assignedTo не пусто

1 голос
/ 16 апреля 2019

Попробуйте обернуть условие || в одно, а затем добавьте && вместе с ним: -

if( empty( $decoded['tickets'][$int]['assignedTo'] ) && ($decoded['tickets'][$int]['status'] === 'active' || $decoded['tickets'][$int]['status'] === 'waiting on customer')){

    $newticketamount++;
    $activetickets[] = $decoded['tickets'][$int];
}

Даже гораздо лучший подход [для удобочитаемости и лучшей реализации]

if( empty( $decoded['tickets'][$int]['assignedTo'] ) ){

    if( ($decoded['tickets'][$int]['status'] === 'active' || $decoded['tickets'][$int]['status'] === 'waiting on customer')){

        $newticketamount++;
        $activetickets[] = $decoded['tickets'][$int];
    }
}

Примечание: - из-за Приоритет оператора Вы столкнулись с проблемой.

0 голосов
/ 16 апреля 2019

Должно работать так

if(in_array($decoded['tickets'][$int]['status'],['active','waiting on customer']) && empty($decoded['tickets'][$int]['assignedTo']))

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