【问题标题】:PHP Adding to Existing Array Created in foreachPHP添加到在foreach中创建的现有数组
【发布时间】:2020-06-24 10:50:12
【问题描述】:

我正在从数据库中选择值并将这些值添加到 foreach 循环中的数组中,这可行。

在此之后,我在第二个查询中选择附加值,我想将这些值添加到同一个数组中,我该如何实现?

请注意,我现在还不关心代码的安全性。

我的(简化的)代码如下;

$users_arr = array();
// first query
$db->setQuery("SELECT id, name, username, email FROM sometable WHERE name = '$name' ");
$results = $db->loadObjectList();

foreach ($results as $result) {
    $userid = $result->id;
    $name = $result->name;
    $username = $result->username;
    $email= $result->email;
    $users_arr[] = array(
      "id" => $userid, 
      "name" => $name, 
      "username" => $username, 
      "email" => $email);
}

// second query
$db->setQuery("SELECT status AS wb_status FROM anothertable ");
$wb = $db->loadObject();

$wb_status = $wb->wb_status;

// add to original array 
$users_arr[] = array("wb_status" => $wb_status);

echo json_encode($users_arr);
exit();

这会产生;

[
  {
    "id": "981",
    "name": "jo",
    "username": "jo123",
    "email": "jo@example.com"
  },
  {
    "wb_status": "Complete"
  }
]

我需要这种格式的;

[
  {
    "id": "981",
    "name": "jo",
    "username": "jo123",
    "email": "jo@example.com",
    "wb_status": "Complete"
  }
]

【问题讨论】:

  • 您为实现这一目标做了哪些尝试?所有条目都应该具有相同的状态值吗?
  • 我刚刚在我的问题中展示了我为实现这一目标所做的努力。如果我遗漏了什么,请告诉我?另外,我只检索一个条目,这就是为什么我想将数组合并为一个。
  • 为什么不简单地将所需的数据加入到sql中呢?从给定的代码中,假设它不是简化版本,它似乎可以简化为echo json_encode($db->loadObjectList());,只要您使用$db->setQuery("..."); 设置正确的查询。以下是如何编写查询的示例:SELECT T1.id, T1.name, T1.username, T1.email, T2.status AS wb_status FROM sometable T1, anothertable T2; Ref:db-fiddle.com/f/k546HWvV9RLxV21F6vUViQ/0

标签: php arrays json foreach array-push


【解决方案1】:

首先运行第二个查询before并将元素添加到foreach中的数组:

// second query becomes first
$db->setQuery("SELECT status AS wb_status FROM anothertable ");
$wb = $db->loadObject();

$wb_status = $wb->wb_status;

$users_arr = array();
// first query becomes second
$db->setQuery("SELECT id, name, username, email FROM sometable WHERE name = '$name' ");
$results = $db->loadObjectList();    

foreach ($results as $result) {
    $userid = $result->id;
    $name = $result->name;
    $username = $result->username;
    $email= $result->email;
    $users_arr[] = array(
      "id" => $userid, 
      "name" => $name, 
      "username" => $username, 
      "email" => $email
      "wb_status" => $wb_status, // Here
    );
}

echo json_encode($users_arr);
exit();

更新:另一种方法是遍历$users_arr 并将所需数据插入每个元素:

// ...
$db->setQuery("SELECT status AS wb_status FROM anothertable ");
$wb = $db->loadObject();

$wb_status = $wb->wb_status;

// I use `&` here so as to pass `$item` as a
// reference to original item in `$users_arr`
foreach ($users_arr as &$item) {
    $item["wb_status"] = $wb_status;
}

echo json_encode($users_arr);
exit();

【讨论】:

  • 谢谢!有没有另一种方法来实现同样的目标?我问是因为我有类似的情况,但是我的第二个查询包含第一个查询的结果,所以它需要保留第二个查询 - 如果这有意义吗?!
  • 更新了我的答案,看看另一种方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多