在多维数组中使用大括号

时间:2018-11-15 20:50:54

标签: php arrays mysqli

我有一个ID数组,用于在foreach循环中执行mysqli查询(以下代码仅是一个示例-该数组将包含50多个元素/ ID)。对于每个数组元素/ ID,我查询一个数组,然后将其包含在compData数组中。但是,我不确定如何在foreach循环中动态定义数组。如果您可以在下面检查我是否正确使用$ {$ val}或其他错误,将不胜感激。谢谢。

  $idArray  = array(
    "List1",
    "List2",
  );

  $compData = array();
  foreach($idArray as $val) {
    $sth = mysqli_query($conn, "SELECT * FROM {$tableName} WHERE ID = {$val}");
    ${$val} = array();
    while($r = mysqli_fetch_array($sth)) {
      For ($n = 1; $n <= $CI_NOYEARS; $n++){
        ${$val}['data'][] = $r[$n]; 
      }
    }
    $compData[{$val}] = ${$val}
  }

  foreach($compData['List1'] as $result) {
    For ($n = 0; $n <= $CI_NOYEARS; $n++){
      echo $result[$n];
    }
  }

上面的代码不起作用,也不回显$ compData数组中的任何数据。下面是一个可以正常工作的示例,其中我直接使用ID来执行代码。

  $sth = mysqli_query($conn, "SELECT * FROM {$tableName} WHERE ID = 'List1'");
  $List1 = array();
  while($r = mysqli_fetch_array($sth)) {
    For ($n = 1; $n <= $CI_NOYEARS; $n++){
        $List1['data'][] = $r[$n];
    }
  }

  $companyData = array();
  $companyData['List1'] = $List1;

  foreach($compData['List1'] as $result) {
    For ($n = 0; $n <= $CI_NOYEARS; $n++){
      echo $result[$n];
    }
  }

2 个答案:

答案 0 :(得分:1)

根据您提供的代码来确定目标是什么有点困难,但似乎要复杂得多。我想我在这里可以复制您想要的输出。

您还应该使用准备好的语句;它们更安全,并且当您要重复多次相同的查询时,可以节省数据库查询的大量开销。我已经在这里实现了。

$idArray = ["List1", "List2"];
$sth     = $conn->prepare("SELECT * FROM `$tableName` WHERE ID = ?");

foreach($idArray as $val) {
    $data = [];
    $sth->bind_param("s", $val);
    $sth->execute();
    $result = $sth->get_result();
    while ($r = $result->fetch_array()) {
        $data = array_merge($data, array_splice($r, 1, $CI_NOYEARS));
    }
    $compData[$val]["data"] = $data;
}

foreach($compData["List1"]["data"] as $result) {
    echo $result;
}

答案 1 :(得分:0)

我什至不明白为什么只将其复制到多维compData数组中时会使用大括号符号?为什么不直接将数据放入数组:

for ($n = 1; $n <= $CI_NOYEARS; $n++) {
    $compdata[$val]['data'][] = $r[$n];
}

(当然,您还需要在foreach的顶层将其声明为数组。)

旁注:我建议不要像这样直接将数据插值到查询字符串中,而应使用绑定参数:http://php.net/manual/en/mysqli-stmt.bind-param.php更加安全。

相关问题