【问题标题】:Difference between PHP Associative Array value assignment methodsPHP关联数组赋值方法的区别
【发布时间】:2021-09-06 10:59:33
【问题描述】:

我正在构建一个基于 PHP 的 Web 应用程序,该应用程序使用 AJAX 调用 CRUD。在设计 FETCH.php 页面时,我在 PHP 中循环和赋值给关联数组时遇到了两种情况。我无法理解这两种类型的值分配之间的使用需求和区别

METHOD #1(此方法将提供纯 JSON 格式(包含该特定记录),并且不需要在 JQuery 中循环,并且可以通过 JQuery 对象表示法将值直接分配给 DOM 元素。我使用此方法在调用特定记录时从数据库中调用表单元素中的值)。

$output = [];
while ($Datarows = $stmt->fetch()) {

 $output['app_id']  = $Datarows['app_id']; // FOCUS HERE PLEASE.

}
echo json_encode($output, JSON_NUMERIC_CHECK);

METHOD #2 (在浏览器 NETWORK 选项卡中检查时,此方法将输出 JSON ARRAY。该数组需要在 JQuery 中循环使用。我使用此方法创建多个依赖下拉框水平。)

$output = [];
while ($Datarows = $stmt->fetch()) {
        
      $app_id   = $Datarows['app_id'];
      $output[] = ['app_id' => $app_id];
 }
 echo json_encode($output,JSON_NUMERIC_CHECK);

我无法理解这两种方法之间的确切区别。请详细说明。

【问题讨论】:

  • 欢迎来到 Stack Overflow。第一个比第二个更正确。请参阅php.net/manual/en/language.types.array.php 中的示例同时阅读 cmets。请注意,这是一个客观的问题,可能会被否决。 stackoverflow.com/help/dont-ask
  • 我怎样才能修改它以涉及研究意图。谢谢
  • 您应该编辑您的帖子。然后您可以添加您的意图。
  • 方法#1 每次循环都会覆盖$output['app_id'],所以即使你有100 个$Datarows$output 也只有一个元素。那么真正的问题是什么?
  • @AbraCadaver 你进一步阐明了我的概念。你说的对。问题是我无法理解这两种方法之间的输出差异。现在我很清楚了。方法 1 仅在我需要由特定 ID 调用的特定记录时才有用。方法 2 将为我提供我可以进一步操作的所有数据。如果我是对的,请支持我的评论。谢谢

标签: javascript php jquery arrays associative-array


【解决方案1】:

考虑以下示例:

<?php
// Assign Arrays to Varibales
$a1 = array();
$a2 = [];

// Assing String to Array
$a1['foo'] = "bar";
$a1['zoo'] = "car";
var_export($a1);
echo "<br />";

// Assign Array to Array (no association)
$a2[] = ['foo' => "bar"];
array_push($a2, "car");
var_export($a2);
?>

您会看到以下输出:

array ( 'foo' => 'bar', 'zoo' => 'car', )
array ( 0 => array ( 'foo' => 'bar', ), 1 => 'car', ) 

你可以看到这是一个截然不同的任务。您要创建什么类型的数组?这将定义您要使用的分配。

对于您的代码,我建议如下。

$output = [];
while ($Datarows = $stmt->fetch()) {
  array_push($output, $Datarows['app_id']);
}
echo json_encode($output, JSON_NUMERIC_CHECK);

这将只收集来自$Datarows 数组的app_id 元素并将它们推送到$output 数组中。您现在将拥有一组 App ID。

如果你想要一个关联元素的数组,你可以这样做:

$output = [];
while ($Datarows = $stmt->fetch()) {
  array_push($output, array('app_id' => $Datarows['app_id']));
}
echo json_encode($output, JSON_NUMERIC_CHECK);

类似的例子:

<?php
$Datarows = array(
  ["app_id" => 1001],
  ["app_id" => 1002],
  ["app_id" => 1003],
  ["app_id" => 1004],
  ["app_id" => 1005],
  ["app_id" => 1006]
);

$output = array();
foreach($Datarows as $row){
  array_push($output, array("app_id" => $row['app_id']));
}
echo json_encode($output);
?>

您会得到以下 JSON:

[{"app_id":1001},{"app_id":1002},{"app_id":1003},{"app_id":1004},{"app_id":1005},{"app_id":1006}]

【讨论】:

  • 你的例子清除了事情。基本上我正在做的第二种方法不是产生关联数组,而是产生一个自动索引数组。我以 JSON 的形式在 Array 中获取 Array。然后我必须循环。知道了。谢谢男人。
  • @FKB 太好了。欢迎您将其标记为答案。将来您还可以投票。
猜你喜欢
  • 2016-11-21
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多