Я прошел через 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