在php中循环遍历多维数组

时间:2013-09-29 14:35:53

标签: php

有些时候编程中的小事情会让巨人们感到高兴。我正在使用2维阵列,但我无法得到我需要的东西。

下面是我的数组结构。

  Array
      (
   [0] => Array
    (
        [0] => 16
        [id] => 16
        [1] => 1
        [userid] => 1
        [2] => abc@gmail.com
        [email] => abc@gmail.com
        [3] => dffsdf
        [message] => dffsdf
        [4] => 0
        [status] => 0
    )

[1] => Array
    (
        [0] => 17
        [id] => 17
        [1] => 1
        [userid] => 1
        [2] => xyz@gmail.comnnn
        [email] => xyz@gmail.comnnn
        [3] => dffsdfnnnnnnnnnnn
        [message] => dffsdfnnnnnnnnnnn
        [4] => 0
        [status] => 0
    )
  )

我在这里做的是为具有一些id的用户获取消息。我这样做是

  if($get_mails[0]['userid'] == $_GET['userid'])
  {

$last_key = end(array_keys($get_mails));

echo '{"Messages":[';

foreach($get_mails as $key => $get_each_mail){

$company_name = $get_each_mail['company_name'];
$email_id = $get_each_mail['id'];
$email_body = $get_each_mail['message'];
}
echo '{"CompanyName":"'.$company_name.'","MessageID":"'.$email_id.'","MessageBody":"'.$email_body.'"';

if ($key == $last_key) 
{
  echo '}]}';
}else{
     echo'},';
     }
}

我无法做到的是这么有趣,我需要在这行代码中为[0]循环

if($get_mails[0]['userid'] == $_GET['userid']) 

喜欢

if($get_mails[i]['userid'] == $_GET['userid']) and it give me all the records against specific user.

这是我想要为特定用户提供的内容

 {"Messages":[{"CompanyName":"newtech","MessageID":"14","MessageBody":"hi how are you"},{"CompanyName":"newtech","MessageID":"15","MessageBody":"hi how are you"},{"CompanyName":"newtech","MessageID":"24","MessageBody":"asfasdfsdfsdfsdfsdfsdfsdfsd"}]}
如果有更多的记录可供特定用户使用,

就像这样,它会增加越来越多。

1 个答案:

答案 0 :(得分:1)

假设$get_mails包含您在上面发布的数组(包括company_name),您可以这样写:

$output = Array( "Messages" => Array() );
foreach( $get_mails as $k => $arr ) {
  $t = Array();
  $t['CompanyName'] = $arr['company_name'];
  $t['MessageID'] = $arr['id'];
  $t['MessageBody'] = $arr['message'];

  $output['Messages'][] = $t;
}

echo json_encode( $output );

首先,准备一个具有JSON结构的数组。语法$array[] = a会将a追加到$array。最后json_encode( ... )会将其转换为有效的JSON,即使您的某个键包含引号或其他在JSON中无效的特殊字符。

我相信您只想显示来自某个用户的消息,并尝试使用if($get_mails[0]['userid'] == $_GET['userid'])来完成该消息。我建议将SQL查询更改为完成该操作的内容,因为如果您尝试使用以下代码搜索所有邮件,页面的性能将大大提高:

$output = Array( "Messages" => Array() );
foreach( $get_mails as $k => $arr ) {
  if( $arr['user_id'] == $_GET['userid'] ) {
    $t = Array();
    $t['CompanyName'] = $arr['company_name'];
    $t['MessageID'] = $arr['id'];
    $t['MessageBody'] = $arr['message'];

    $output['Messages'][] = $t;
  }
}

echo json_encode( $output );