PHP каскадирование (передача) последующих возвратов через 3 функции - PullRequest
0 голосов
/ 28 мая 2020

Я прошел через S / O и не нашел этой конкретной c проблемы, хотя моя неопытность может означать, что я искал неправильные термины. Любая помощь будет оценена. Спасибо.

В принципе, у меня есть три PHP функции (в классе с именем KeyPositions). Первый вызывается путем передачи аргумента; вторая функция вызывается первой, а затем создает массив, который передается третьей функции. Используя echo и print_r, я вижу, что все на месте при передаче. Проблема возникает при возврате из последней функции (3-й). Хотя мой тест foreach / echo (непосредственно перед возвратом) показывает, что каждый элемент в массиве присутствует, это не то, что я получаю, когда смотрю на то, что возвращается в исходный вызов. Вот шаги:

Исходный вызов: $keypositions = KeyPositions::getKPSponsor($session_userid);

Второй возврат (где начинается проблема?): return self::getKPList($sponsor_list);

Третья функция: public static function getKPList($arr)

Тест перед возвратом (отлично показывает содержимое массива): foreach($kppositions as $s) { echo $s['kp_root'],"<br>"; }

Оператор возврата: return $kppositions;

Но когда я go вернулся к исходному вызову функции и запустил это test Я получаю только часть того, что я ожидал от возврата (см. выше): foreach($keypositions as $t) { echo $t['id'],"<br>"; }

Есть ли что-то, чего мне не хватает, когда массив передается от одной функции к другой? Все массивы ассоциативны. Я намеренно не включил длинный код в каждую из функций, потому что сами функции, кажется, работают идеально на основе теста, который я выполняю непосредственно перед каждым возвратом (это означает, что то, что я ожидаю быть внутри массива, полностью неповреждено на каждом этапе). Я считаю, что это может иметь какое-то отношение к передаче результатов от одной функции к другой? Любое направление здесь будет оценено. Спасибо.

Хорошо. Сожалею. Моя мысль заключалась в том, чтобы не запутывать весь код. Вот он. Имейте в виду, что это для тестирования, а не для окончательного (например, PHP инъекций пока нет.)

public static function getKPSponsor($userid)
    {
        return self::getKPSponsors('positions.jobholder_uid = "' .$userid. '"');
    }

    public static function getKPSponsors($criteria = '')
    {
        $sponsor_levels = array();
        $sponsor_list = array();
        $criteria = " WHERE $criteria";
        $db = Database::getInstance();
        $mysqli = $db->getConnection(); 
        $sql_query_sponsors = "SELECT positions.position_id AS id, jobholder_uid AS uid FROM positions $criteria";
        $result_sponsors = $mysqli->query($sql_query_sponsors);

        while ($sponsor_level = mysqli_fetch_assoc($result_sponsors)){
            $sponsor_id = $sponsor_level['uid'];
            $sponsor_level['items'] = self::getKPSponsors('positions.positionmgr_uid = "' .$sponsor_id. '"');
                $sponsor_levels[] = $sponsor_level;
        }

        foreach($sponsor_levels as $r) {
            $sponsor_list[] = $r['id'];
        }

        mysqli_free_result($result_sponsors);
        unset($r);
        return self::getKPList($sponsor_list);
    }

    public static function getKPList($arr)
    {
        $kppositions = array();
        $db = Database::getInstance();
        $mysqli = $db->getConnection();

        $sql_query_keypositions = "SELECT key_positions.kp_id AS id, key_positions.kp_root, key_positions.kp_area, key_positions.c_ksa, key_positions.c_relationship, key_positions.c_rare, key_positions.urgency, positions.jobholder_uid, master.last_name, CONCAT(master.first_name,' ',master.last_name) AS full_name FROM key_positions INNER JOIN positions ON positions.position_id = key_positions.kp_sponsor INNER JOIN master ON positions.jobholder_uid = master.email_address WHERE key_positions.kp_sponsor IN (" . implode(",", $arr) . ");";
        $result = $mysqli->query($sql_query_keypositions);

        while ($kp3 = mysqli_fetch_assoc($result)) {
            $kppositions[] = $kp3;
        }

        foreach($kppositions as $s) { // My testing ...
            echo $s['kp_root'],"<br>";
        }


        mysqli_free_result($result);
        return $kppositions;
    }

В случае, если это поможет, результаты моего теста ДО возврата дают:

1000014 1000015 1000016 1000012 1000006 1000022 1000017 1000018 1000019 1000020 1000021 1000008 1000009 1000010 1000011 1000004 1000005 1000007 1000013 1000003 1000001 1000002

Выход ПОСЛЕ возврата:

1000001 1000002

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