У меня есть код ниже. Я пытаюсь перебрать массив внутри строки и вернуть результаты как часть строки.
$household = '{
"data": {
"attributes": {
"name":"'.rgar( $entry, '1.6' ).'"
},
"relationships": {
"people":{
"data":[
'.
foreach ($family_ids[] as $fam_member){
return '{"type":"Person","id":"'.$fam_member.'"}';
}.'
]
},
"primary_contact":{
"data":{"type":"Person","id":"1"}
}
}
}
}';
echo($household);
Мои ожидаемые результаты будут примерно такими, как это
'{
"data": {
"attributes": {
"name":"'.rgar( $entry, '1.6' ).'"
},
"relationships": {
"people":{
"data":[
{"type":"Person","id":"2"},
{"type":"Person","id":"3"},
{"type":"Person","id":"4"}, //note the commas
{"type":"Person","id":"5"}
]
},
"primary_contact":{
"data":{"type":"Person","id":"1"}
}
}
}
}';
Я считаю, что моя проблема связана с тем, что мои кавычки вставляют и выходят из строки. Однако я также не уверен, как обращаться к удалению запятой для последнего результата.
Создавать Json-строку вручную - не лучшая идея. Лучше построить массив и преобразовать его в json






Вам нужно сначала присвоить значение переменной foreach, а затем присвоить эту переменную вашему json.
$data = [];
foreach ($family_ids as $fam_member){
$data[]= ["type"=>"Person","id"=> $fam_member]
}
$household = '{
"data": {
"attributes": {
"name":"'.rgar( $entry, '1.6' ).'"
},
"relationships": {
"people":{
"data":'. json_encode($data) . '
},
"primary_contact":{
"data":{"type":"Person","id":"1"}
}
}
}
}';
echo($household);
Пример жестко запрограммированного примера Результат: - https://3v4l.org/enrGP
Вы можете объединить переменную $household таким образом. Хотя решение @ AliveToDie является лучшим, но это решение будет легко понять новичкам.
$household = '';
$household .= '{
"data": {
"attributes": {
"name":"'.rgar( $entry, '1.6' ).'"
},
"relationships": {
"people":{
"data":[
';
foreach ($family_ids[] as $key => $fam_member){
$household .= '{"type":"Person","id":"'.$fam_member.'"}';
if ((count($family_ids)-1)!=$key)// if foreach loop reaches the last element then it won't print the comma
$household .= ',';
}
$household .='
]
},
"primary_contact":{
"data":{"type":"Person","id":"1"}
}
}
}
}';
echo($household);
Есть ли причина для создания строки json, избегая кавычек?
Возможно, это решение (которое, я думаю, даст вам больше свободы, и вам не придется беспокоиться об экранировании кавычек и т. д.) Будет полезно для вас:
$household['data']['attributes']['name'] = rgar( $entry, '1.6' );
$household['data']['relationships']['people']['data'] = array(); // In case $family_ids is empty
foreach ($family_ids[] as $fam_member):
$household['data']['relationships']['people']['data'][] = array(
'type' => 'Person',
'id' => $fam_member
);
endforeach;
$household['data']['relationships']['primary_contact']['data'] = array(
'type' => 'Person',
'id' => '1'
);
$json = json_encode($household);
$prettyJson = json_encode($household, JSON_PRETTY_PRINT);
echo $prettyJson;
Затем вы можете либо использовать $json для вашего json, либо, если вам нужно, чтобы он был отформатирован и красиво, вы можете использовать $prettyJson;
ты не можешь так поступать. создать переменную. назначьте значение итерации foreach этой переменной, а затем назначьте эту переменную вашему массиву json