2013-09-29 3 views
2

некоторое время мелочи в программировании получают гиганты. я woking на 2 размерном массиве, но я не могу получить то, что мне нужно.цикл через многомерную массив в php

ниже - моя структура массива.

Array 
     (
    [0] => Array 
    (
     [0] => 16 
     [id] => 16 
     [1] => 1 
     [userid] => 1 
     [2] => [email protected] 
     [email] => [email protected] 
     [3] => dffsdf 
     [message] => dffsdf 
     [4] => 0 
     [status] => 0 
    ) 

[1] => Array 
    (
     [0] => 17 
     [id] => 17 
     [1] => 1 
     [userid] => 1 
     [2] => [email protected] 
     [email] => [email protected] 
     [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"}]} 

так реагирует, он будет добавлять все больше и больше, если будет доступно больше записей против конкретного пользователя.

+3

Вы пытаетесь сделать JSON? – Sumurai8

+0

да точно я делаю jason –

+2

Используйте 'json_encode()' для этого вместо того, чтобы пытаться эхо-символов правильно. Не могли бы вы добавить структуру желаемого json к вопросу? – Sumurai8

ответ

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); 
+0

Я решил, что в моем коде не было ошибок, кроме}.кстати, спасибо каждому за их доброе и приятное и своевременное предложение. Thaks overstack, а также все вы, ребята. –

+0

вот мой правильный код if ($ get_mails) { \t \t $ last_key = end (array_keys ($ get_mails)); \t echo '{"Messages": ['; \t foreach ($ get_mails as $ key => $ get_each_mail) { \t $ company_name = $ get_each_mail ['company_name']; \t $ email_id = $ get_each_mail ['id']; \t $ email_body = $ get_each_mail ['message']; \t \t echo '{"CompanyName": "'. $ Company_name. '", "MessageID": "'. $ Email_id. '", "MessageBody": "'. $ Email_body. '"'; \t \t если ($ ключ == $ last_key) \t { \t эхо '}]}'; \t} else { \t \t echo '},'; \t \t}} \t \t \t \t \t } –

Смежные вопросы