Значение определенно находится в массиве, но оно продолжает возвращать false - PullRequest
0 голосов
/ 12 декабря 2018

В моем ./includes/functions.php у меня есть следующая функция

function ck_rank($rank)
{
    $strJsonFileContents = file_get_contents("./includes/globals.json");
    $status = json_decode($strJsonFileContents, true);
    $ranks = array();
    foreach ($status as $value) { 
        array_push($ranks, $value); 
    }
    if (in_array($rank, $ranks)) { 
        echo "true";
    } else { 
        echo "false" ; 
    }
}

В моем main.php я использую это для проверки возврата этой функции, и если true, отображать a, если false,

if (ck_rank($rank)) { <td>........</td> }

Проблема не в том, что функция всегда возвращает false.
Я действительно новичок в json, и я уверен, что есть лучший способ, нолюбая помощь будет принята с благодарностью!ти

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Проблема в том, что вы ничего не возвращаете, вы просто выводите значение true или false ...

    if ( in_array($rank, $ranks)) { echo "true" ;}
            else { echo "false" ; }

Должно быть

    if ( in_array($rank, $ranks)) { 
        return true;
    }
    else { 
        return false; 
    }

Или вы можете упростить его до...

return in_array($rank, $ranks);
0 голосов
/ 12 декабря 2018

Вы можете использовать эту функцию:

function ck_rank($rank)
{
    $strJsonFileContents = file_get_contents("./includes/globals.json");
    $status = json_decode($strJsonFileContents, true);

    if (empty($status[0]['ranks'])) {
        return false;
    }

    $rankData = $status[0]['ranks'];

    $rankData = explode(',', $rankData);

    $ranks = array();

    foreach ($rankData as $value) {
        array_push($ranks, strtolower(trim($value)));
    }
    if (in_array(strtolower(trim($rank)), $ranks)) {
        echo "true";
    } else {
        echo "false";
    }
}
0 голосов
/ 12 декабря 2018

Ваша переменная ранга

[ { "ranks":"Director,Asst. Director,Captain,Lieutenant,Chief,Deputy Chief,Dep. Chief" } ]

декодируется как одна строка

"Director,Asst. Director,Captain,Lieutenant,Chief,Deputy Chief,Dep. Chief"

Таким образом, вы должны сначала разделить ее запятой.Например, вы можете сделать это следующим образом:

function ck_rank($rank)
    {
            $strJsonFileContents = file_get_contents("./includes/globals.json");
            // for your json [ { "ranks":"Director,Asst. Director,Captain,Lieutenant,Chief,Deputy Chief,Dep. Chief" } ]
            // $ranks variable will contain array:
            // [["ranks" => "Director,Asst. Director,Captain,Lieutenant,Chief,Deputy Chief,Dep. Chief"]] 
            $status = json_decode($strJsonFileContents, true);
            $ranks = explode(",", $status[0]['ranks']); 
            return in_array($rank, $ranks);
    }

Обратите внимание, что мы добавляем [0], потому что в вашем json это объект в массиве с полем ranks

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