首页 > 解决方案 > PHP通过3个函数级联(传递)后续返回

问题描述

我已经通过 S/O 并没有发现这个具体问题,尽管我缺乏经验可能意味着我搜索了错误的术语。任何帮助,将不胜感激。谢谢你。

基本上,我有三个 PHP 函数(在一个名为 KeyPositions 的类中)。第一个是通过传递参数调用的;第二个函数由第一个函数调用,然后生成一个传递给第三个函数的数组。通过使用 echo 和 print_r,我可以看到所有内容在传递时都已到位。问题发生在从最终函数(第三个)返回时。虽然我的 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;

但是当我回到原来的函数调用并运行这个测试时,我只收到了我期望从返回中得到的子集(上图):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 1000022 1000017 1000018 1000018 1000019 1000020 1000021 1000021 1000008 1000009 10000101000010100001010000100100100004 1000005 1000005 10000001300000013 1000003 1000001 1000002 1000002 1000002

返回后的输出产生:

1000001 1000002

标签: phparraysfunction

解决方案


推荐阅读