【问题标题】:how to add another row in one array?如何在一个数组中添加另一行?
【发布时间】:2016-10-16 17:49:45
【问题描述】:

我正在获取邀请数组,对于每个邀请行的 sender_id 来自邀请行,我正在从 users 表中检索用户的详细信息。

我想在同一个邀请数组中添加用户的详细信息。我试着像这样添加。

    function getInvitations()
{
    $database = new Database(ContactsConstants::DBHOST,ContactsConstants::DBUSER,ContactsConstants::DBPASS,ContactsConstants::DBNAME);
    $dbConnection = $database->getDB();

    $stmt = $dbConnection->prepare("SELECT * FROM `Invitation` WHERE Invitation.invitee_no = ?");
    $stmt->execute(array($this-> invitee_no));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $invitations = array();

    if (count($rows) > 0) {

        foreach($rows as $row)
        {
            $stmt = $dbConnection->prepare("Select * from Users where user_id =?");
            $stmt->execute(array($row['sender_id']));

            $result = $stmt->fetch(PDO::FETCH_ASSOC);

            $invitations[] = $row;
            $invitations[] = $result;
        }

        $response = array("status" => 1, "message" => "Success", "Invitations" => $invitations);
        return json_encode($response);
    }

    else {
        $response = array("status"=>-1,"message"=>"Invitations list is empty");
        return json_encode($response);
    }
}

我得到这样的输出:

    {
  "status": 1,
  "message": "Success",
  "Invitations": [
    {
      "invitation_id": "369",
      "date": "12/08/2016",
      "invitee_no": "8655864341",
      "status": "1",
      "sender_id": "44"
    },
    {
      "user_id": "44",
      "user_name": "Angel",
      "password": "angel",
      "profile_image": "a8625093a2e95ee6b5042456b7cccc20.png",
      "device_id": "eVOnz8AMVOs:APA91bHuq9Q4FLcOewUCSAQu79aZNeQsb4710k66g1MHDfZUZWa4ZcARs0SekUfnYUt5sTiKeXfFk_Gg_LdtSKk-pTAaQLxPe9UMkYG9-d-IkDRlGYxkzonQ1h2YN78S7RU0x90NAby_",
      "mobile_no": "9090966666",
      "email_id": "kjfhg@half.com",
      "full_name": "ajjdjd",
      "job_title": "sxsaca",
      "home_address": "scacac",
      "work_phone": "ugiuygitf",
      "work_address": "bbuyiytfi"
    },
  ]}

但我希望将这两个细节放在一个数组中。我怎样才能得到这个? 有人能帮忙吗?谢谢。。

【问题讨论】:

  • 旁注:您似乎将密码存储为纯文本。 永远不要那样做 - 使用 password_hash 创建一个哈希,然后使用 password_verify 来验证它。
  • 会听从你的建议..谢谢..@FranzGleichmann
  • 这条线正常吗?? String number = subObject1.getString("invitee_no");
  • 是的,邀请数组字符串没有收到错误,只有用户详细信息给出错误。@nanocv
  • 我猜你传递给doPostExecute 方法的response 变量是JSONArray response = json_response.getJSONArray("Invitations"); 之类的结果,不是吗?

标签: php android arrays


【解决方案1】:

问题是您正在向$invitations 变量推送两个不同的关联数组。 这里的解决方案是将两个数组(array_merge)的元素合并为一个,然后推送到$invitation

尝试更改此代码:

$invitations[] = $row;
$invitations[] = $result;

通过这个:

$invitations[] = array_merge($row, $result);

编辑:

要解决警告 array_merge(): Argument #2 is not an array 尝试强制 $result 使用强制转换为数组类型:

$invitations[] = array_merge($row, (array)$result);

【讨论】:

  • 警告: array_merge(): Argument #2 is not an array in /var/www/html/contactsapi/Invitation.php 在线..我得到了预期的结果,但也得到了这个警告。@nanocv
  • 嗯...这句话$stmt->fetch(PDO::FETCH_ASSOC)应该输出一个关联数组。无论如何,您可以尝试强制进行数组转换。我将编辑答案。
  • 您能帮我解决已编辑的问题吗? @nanocv
  • 当然!我无法在 Android 中编程,但我会尽力帮助您。给我一点时间研究一下
【解决方案2】:

使用下面的函数作为@nanocv告诉你必须改变如下

<?php
   function getInvitations()
{
    $database = new Database(ContactsConstants::DBHOST,ContactsConstants::DBUSER,ContactsConstants::DBPASS,ContactsConstants::DBNAME);
    $dbConnection = $database->getDB();

    $stmt = $dbConnection->prepare("SELECT * FROM `Invitation` WHERE Invitation.invitee_no = ?");
    $stmt->execute(array($this-> invitee_no));
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $invitations = array();

    if (count($rows) > 0) {

        foreach($rows as $row)
        {
            $stmt = $dbConnection->prepare("Select * from Users where user_id =?");
            $stmt->execute(array($row['sender_id']));

            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            $final_array = array_merge($row,$result);
            $invitations[] = $final_array;
        }

        $response = array("status" => 1, "message" => "Success", "Invitations" => $invitations);
        return json_encode($response);
    }

    else {
        $response = array("status"=>-1,"message"=>"Invitations list is empty");
        return json_encode($response);
    }
}

?>

希望这会有所帮助!

【讨论】:

  • 警告: array_merge(): Argument #2 is not an array in /var/www/html/contactsapi/Invitation.php 在线..我得到了预期的结果,但也得到了这个警告。@Albert Akki
  • 我认为 '$result' 将成为对象,这就是您收到警告的原因。将该变量从对象转换为数组,例如 '$final_array = array_merge($row,(array)$result);'
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 2019-04-30
  • 2011-11-04
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多