Использование цикла for для создания объекта JSON в PHP

#php #json #rest

#php #json #остальное

Вопрос:

Я пытаюсь создать объект JSON следующим образом:

 "results": [
{"key":"1","trackname":"graham@insideoutrenovations.com.au"},
{"key":"1","trackname":"sjwindsor@westnet.com.au"},
]
  

Однако мой PHP-код создает новый объект для каждой итерации, json выглядит следующим образом:

 0: "{"key":"1","trackname":"graham@insideoutrenovations.com.au"}"
1: "{"key":"1","trackname":"sjwindsor@westnet.com.au"}"
  

Вот мой php:

 $results = array();

function json_response($trackName) {
return json_encode(array(
    'key' => '1',
    'trackname' => $trackName
));
}

//There is 3 reg expressions for each primary array so we need to iterate by 3, otherwise we will get 3 lots of the same email address
for ($i = 0; $i < $numMatches; $i = $i   $patternNum) {
    $results[] = json_response($matches[0][$i]);
}
//$results = call_user_func_array('array_merge',$results);
echo json_encode($results);
  

Комментарии:

1. в чем ваша проблема?

Ответ №1:

вам нужно удалить первую функцию json_encode

вы можете либо попытаться создать ассоциативный массив, либо использовать функцию compact, которая сделает всю работу за вас.

 //There is 3 reg expressions for each primary array so we need to iterate by   3, otherwise we will get 3 lots of the same email address
  for ($i = 0; $i < $numMatches; $i = $i   $patternNum) {
    $results[] = $matches[0][$i]; // json_encode removed
}

echo json_encode(array('results' => $results));
// or
echo json_encode(compact('results'));
  

Ответ №2:

В финале echo вы кодируете в json уже закодированный массив.

Удалить json_encode из json_response функции.