为什么只显示第一个元素的值?

时间:2013-09-03 12:02:08

标签: php arrays

我有两个数组我正在将一个数组插入另一个数组。使用foreach循环对第一个数组的每个元素执行此操作。但是我能够在第二次迭代期间只将第一对键值对附加到第一个数组,而不是。你能帮我实现这个数组元素吗?我的代码如下:

$data = $grid->GetData();
        //print_d($data);

        foreach($data as $key => $value) { 
          $sql  =" SELECT users_details.user_state, users_details.user_city FROM ".TBL_USERS." AS user JOIN ";
          $sql .= TBL_USERS_DETAILS." AS users_details on user.user_id = users_details.user_id ";
          $sql .=" WHERE user.user_id = '". $value['user_id']."'" ;

          $gDb->Query( $sql );
          $user_data = $gDb->FetchArray(MYSQL_FETCH_SINGLE);

          $data[$key]['user_state'] = $user_data['user_state'];
          $data[$key]['user_city'] = $user_data['user_city'];
        }

第一个名为$ data的数组如下:

Array
(
    [0] => Array
        (
            [user_id] => 9def02e6337b888d6dbe5617a172c18d
            [user_first_name] => Ashutosh
            [user_last_name] => Modi
            [user_email] => ashutosh.modi@gmail.com
            [user_status] => enable
            [user_subscription] => lifetime
            [user_registered_type] => online
            [user_reg_date] => 1325581397
        )

    [1] => Array
        (
            [user_id] => a6d22e4cc3f65778a60b359842bcec82
            [user_first_name] => Dilip
            [user_last_name] => Modi
            [user_email] => dm.modi@gmail.com
            [user_status] => enable
            [user_subscription] => period
            [user_registered_type] => online
            [user_reg_date] => 1325152066
        )

)

名为$user_data的第二个数组的第一次迭代如下:

    Array
(
    [user_state] => Rajasthan
    [user_city] => Jhunjhunu
)

现在,在附加了这个数组后,$ data变为如下:

Array
(
    [0] => Array
        (
            [user_id] => 9def02e6337b888d6dbe5617a172c18d
            [user_first_name] => Ashutosh
            [user_last_name] => Modi
            [user_email] => ashutosh.modi@gmail.com
            [user_status] => enable
            [user_subscription] => lifetime
            [user_registered_type] => online
            [user_reg_date] => 1325581397
            [user_state] => Rajasthan
            [user_city] => Jhunjhunu
        )

    [1] => Array
        (
            [user_id] => a6d22e4cc3f65778a60b359842bcec82
            [user_first_name] => Dilip
            [user_last_name] => Modi
            [user_email] => dm.modi@gmail.com
            [user_status] => enable
            [user_subscription] => period
            [user_registered_type] => online
            [user_reg_date] => 1325152066
            [user_state] => 
            [user_city] => 
        )

)

我不明白为什么第二个数组的 user_state和user-city 的空白值。即使在第二次迭代中具有数组$user_data的值如下:

Array
(
    [user_state] => Arunachal Pradesh
    [user_city] => Shollong
)

你能解决我的这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

user_state user_city 都已添加,因此您的代码运行正常。你必须知道为什么 $ user_data 在那里是空的。

让你的代码像这样:

      echo $sql;
      print_r($user_data);
      $data[$key]['user_state'] = $user_data['user_state'];
      $data[$key]['user_city'] = $user_data['user_city'];

这将输出每个循环的sql,print_r函数(或var_dump)将在这些行之前回显$ user_data数组。检查它为什么是空的。可能你在那个循环中的第二个查询不是你想象的那样。

答案 1 :(得分:0)

您的插入位于数组数组中。试试这个

           $i=0;
       foreach($data as $key => $value) { 
       $sql  =" SELECT users_details.user_state, users_details.user_city FROM ".TBL_USERS." AS user JOIN ";
      $sql .= TBL_USERS_DETAILS." AS users_details on user.user_id = users_details.user_id ";
      $sql .=" WHERE user.user_id = '". $value['user_id']."'" ;

      $gDb->Query( $sql );
      $user_data = $gDb->FetchArray(MYSQL_FETCH_SINGLE);
         $data[$i]['user_state'] = $user_data['user_state'];
         $data[$i]['user_city'] = $user_data['user_city'];
          $i++;

其中 $ i表示数据文件中的数组键,默认索引从0开始&去1,2&在您的数据文件中......

另外,探索以下程序可能会找到任何好东西。在形式上帮助解决您的问题。                例如,一个更新数组内部数组的程序。

        <?php
    $d3 = array('0'=>array('b'=>'1','c'=>'2'),'1'=>array('b'=>'3','c'=>'4'));
           $i=0;
           foreach($d3 as $k => $v){
           $d3[$i]['b'] = "h";
           $i++;
         }
       print_r($d3);
          ?>