У меня серьезные головные боли, пытающиеся создать многомерный массив из двух отдельных вариантов выбора MySQL … Я целый день искал здесь и Google и должен наконец признать поражение и попросить о помощи (я тоже новичок что не помогает !!!).
У меня есть две таблицы, одна из которых содержит результат одной строки на один идентификатор и другой, который может содержать несколько строк для идентификатора. То, что я пытаюсь сделать, это объединить эти два в многомерный массив.
Мой код (как бы это ни было плохо) выглядит следующим образом:
require 'php/phpConnection.php'; $sqlString1 = mysql_query("SELECT id FROM supportstaff_section1_a"); $firstArray = array(); $secondArray = array(); while ($r = mysql_fetch_assoc($sqlString1)) { $applicantID = $r['id']; $sqlString2 = mysql_query("SELECT educationalname FROM supportstaff_section5 WHERE id = '$applicantID'"); while ($x = mysql_fetch_assoc($sqlString2)) { $secondArray[] = $x; } $firstArray[] = $r + $secondArray; $secondArray = array(); } print json_encode($firstArray); mysql_close($con);
В результате получается следующее:
[{"id":"8m8wwy","0":{"educationalname":"GCSE - English"},"1":{"educationalname":"GCSE - Maths"}},{"id":"wiL7Bn"},{"id":"zAw6M1"}]
Но я думаю, что это должно выглядеть примерно так:
[{"id":"8m8wwy","Array2":"[{"educationalname":"GCSE - English"},{"educationalname":"GCSE - Maths"}]"},{"id":"wiL7Bn"},{"id":"zAw6M1"}]
Во всяком случае, как я могу вставить второй SQL Select в мой первый SQL Select для каждого ID.
Спасибо за любой совет / помощь.
РЕДАКТИРОВАТЬ
Взято с W3Schools.com:
Array ( [Griffin] => Array ( [0] => Peter [1] => Lois [2] => Megan ) [Quagmire] => Array ( [0] => Glenn ) [Brown] => Array ( [0] => Cleveland [1] => Loretta [2] => Junior ) )
Я пытаюсь заставить его работать, как указано выше.
Здесь вам нужно немного поработать. Что-то вроде следующего будет работать как объединение И с многомерными данными:
<?php require 'php/phpConnection.php'; // ====================================================================== // Create a join query (way faster than several separate ones!) $sqlquery = "SELECT SSSA.id, SSS5.educationalname" . " FROM supportstaff_section1_a SSSA" . " LEFT OUTER JOIN supportstaff_section5 SSS5 ON SSS5.id = SSSA.ID"; // ====================================================================== // Run the query and get our results $resultarray = array(); if ($resource = mysql_query($sqlquery)) { while ($curarray = mysql_fetch_assoc($resource)) { // Create an array, if it doesn't exist if (!isset($resultarray[$curarray["id"]])) $resultarray[$curarray["id"]] = array(); // Add to the array, if not null $curstring = (string) $curarray["educationalname"]; if ($curstring != "") $resultarray[$curarray["id"]][] = $curstring; } mysql_free_result($resource); } // ====================================================================== // Convert from a keyed array to a standard indexed array (0, 1, 2, etc.) $finalarray = array(); foreach ($resultarray as $id => & $data) { // Start with just ID $newarray = array( "id" => $id ); // Get the data, if we have any if (count($data)) $newarray["educationalnames"] = & $data; // Add to our final array and clear the newarray $finalarray[] = & $newarray; unset($newarray); } // ====================================================================== // Get the JSON of our result $jsonresult = json_encode($finalarray); // ====================================================================== // Echo it to test echo $jsonresult; // ====================================================================== // Close the database mysql_close($con); ?>
с<?php require 'php/phpConnection.php'; // ====================================================================== // Create a join query (way faster than several separate ones!) $sqlquery = "SELECT SSSA.id, SSS5.educationalname" . " FROM supportstaff_section1_a SSSA" . " LEFT OUTER JOIN supportstaff_section5 SSS5 ON SSS5.id = SSSA.ID"; // ====================================================================== // Run the query and get our results $resultarray = array(); if ($resource = mysql_query($sqlquery)) { while ($curarray = mysql_fetch_assoc($resource)) { // Create an array, if it doesn't exist if (!isset($resultarray[$curarray["id"]])) $resultarray[$curarray["id"]] = array(); // Add to the array, if not null $curstring = (string) $curarray["educationalname"]; if ($curstring != "") $resultarray[$curarray["id"]][] = $curstring; } mysql_free_result($resource); } // ====================================================================== // Convert from a keyed array to a standard indexed array (0, 1, 2, etc.) $finalarray = array(); foreach ($resultarray as $id => & $data) { // Start with just ID $newarray = array( "id" => $id ); // Get the data, if we have any if (count($data)) $newarray["educationalnames"] = & $data; // Add to our final array and clear the newarray $finalarray[] = & $newarray; unset($newarray); } // ====================================================================== // Get the JSON of our result $jsonresult = json_encode($finalarray); // ====================================================================== // Echo it to test echo $jsonresult; // ====================================================================== // Close the database mysql_close($con); ?>
И получившаяся $ jsondata будет выглядеть так (но не так разгадана, конечно):
[ { "id": "8m8wwy", "educationalnames": ["GCSE - English", "GCSE - Maths"] }, { "id": "wiL7Bn" }, { "id": "zAw6M1" } ]
Если у вас есть идентификатор из первого массива, вы можете проверить ключи / значения с этим идентификатором во втором массиве.
Если вы хотите получить ключ, вы должны использовать
array_key_exists($string)
И если вы хотите получить значение, которое вы должны использовать
in_array($string)
Вы можете использовать цикл foreach для выполнения этих функций!