2013-02-23 162 views
2

我正在尝试从两个单独的MySQL选择中创建一个多维数组......我一直在这里和谷歌搜索整天,并最终必须承认失败,并寻求一些帮助(我也是一个新手,但这并不能帮助!!!)。PHP MYSQL多维数组

我有两个表,其中一个包含单个行结果每个ID和另一个可以包含多个行的ID。我想要做的是将两者结合成一个多维数组。

我的代码(可怜的,因为它可能是)看起来是这样的:

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到我的第一个S QL为每个ID选择。

感谢您的任何建议/帮助。

编辑

从W3Schools.com摘自:

Array 
(
    [Griffin] => Array 
    (
    [0] => Peter 
    [1] => Lois 
    [2] => Megan 
    ) 
[Quagmire] => Array 
    (
    [0] => Glenn 
    ) 
[Brown] => Array 
    (
    [0] => Cleveland 
    [1] => Loretta 
    [2] => Junior 
    ) 
) 

我试图使它像上述工作。

+0

有什么区别第一和第二之间 - 你能解释一下吗? – 2013-02-23 20:42:19

+0

第一个和第二个表之间的区别是,第一个将只包含每个ID的单行结果...例如ID,名字,第二个名称等。第二个表可以包含每个ID多个行。 。例如:ID-A,考试结果1一些中心A,ID-A考试结果2一些中心B,ID-A考试结果3一些中心C等 – jaminben 2013-02-23 20:47:42

+0

我认为你想要做的是SQL连接。顺便说一句,与未来相关的东西:[不要使用'mysql_'函数](http://php.net/manual/en/function.mysql-query.php) – 2013-02-23 20:51:02

回答

4

您需要在这里获得一点创意。像下面的内容将工作作为一个连接,并与多维数据:

<?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" 
    } 
] 
+0

谢谢马克......它几乎可行。如果我在phpMyAdmin运行查询,我得到: 8m8wwy GCSE - 英语 8m8wwy GCSE - 数学 wiL7Bn NULL zAw6M1 NULL 哪个是正确的,但在浏览器中我只得到:[{ “ID”: “ID”,“educationalnames “:[”GCSE - 英语“,”GCSE - 数学“]}]所以它的工作类型,但不返回所有结果或正确的ID。 – jaminben 2013-02-23 21:07:27

+0

其实,你的编辑看起来好像你甚至不想像我所显示的那样转换格式,所以我会剪掉整个'//从键盘转换...' 部分,只需执行'$ jsonresult = json_encode($ resultarray);'而是。 – 2013-02-23 21:10:37

+0

@ user1399098 - 没关系,我发现了这个问题。固定在原来的!哎呀! – 2013-02-23 21:12:57

1

如果您有第一个阵列的ID,您可以使用此ID在第二个阵列中检查键/值。

如果你想拿到钥匙,你应该使用

array_key_exists($string) 

如果你想获得的价值,你应该使用

in_array($string) 

您可以使用foreach循环来执行这个功能!