【问题标题】:PHP MYSQL multidimensional arrayPHP MYSQL 多维数组
【发布时间】:2013-02-23 20:37:24
【问题描述】:

试图从两个单独的 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 插入到每个 ID 的第一个 SQL Select 中。

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

编辑

取自 W3Schools.com:

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

我正在尝试让它像上面那样工作。

【问题讨论】:

  • 第一个和第二个有什么区别 - 你能解释一下吗?
  • 第一个表和第二个表之间的区别在于,第一个表将只包含每个 ID 的一行结果...例如 ID、名字、第二个名字等。第二个表可以每个 ID 包含多行...例如:ID-A, Exam Result 1 Some Center A, ID-A Exam Result 2 Some Centre B, ID-A Exam Result 3 Some Centre C etc
  • 我认为你想要做的是一个 SQL 连接。顺便说一句,与未来相关的东西:Don't use mysql_ functions
  • 连接可以工作,但我不想使用连接,因为我认为多维数组会更好。我不会从表一中得到重复的结果,这些结果不需要多次。感谢您提供有关 mysql_ 函数的提示。

标签: php mysql


【解决方案1】:

您需要在这里获得一点创意。像下面这样的东西可以作为多维数据的连接和:

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

【讨论】:

  • 谢谢马克......它几乎可以工作了。如果我在 PHPMyadmin 中运行查询,我得到: 8m8wwy GCSE - English 8m8wwy GCSE - Maths wiL7Bn NULL zAw6M1 NULL 这是正确的,但在浏览器中我只得到: [{"id":"id","educationalnames":["GCSE - 英语","GCSE - 数学"]}] 所以它有点工作但没有返回所有结果或正确的 id。
  • 实际上,通过你的编辑,看起来你甚至不想像我展示的那样转换格式,所以我会剪掉整个// Convert from keyed ... 部分,只做$jsonresult = json_encode($resultarray);而是。
  • @user1399098 - 没关系,我发现了问题。修复原版!糟糕!
  • 这是:$jsonresult = json_encode($resultarray);返回 [{"id":"id","educationalnames":["GCSE - English","GCSE - Maths"]}]
  • @user1399098 - 你可以试试更新的版本吗?另外,我应该更新它以提供您要求的 EDITED 版本吗?
【解决方案2】:

如果您有来自第一个数组的 ID,您可以在第二个数组中检查具有此 ID 的键/值。

如果你想得到你应该使用的密钥

array_key_exists($string)

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

in_array($string)

您可以使用 foreach 循环来执行这些函数!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2015-04-30
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2016-02-10
    相关资源
    最近更新 更多