Возврат значений foreach внутри строки

У меня есть код ниже. Я пытаюсь перебрать массив внутри строки и вернуть результаты как часть строки.

    $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"}
                        }
                    }
                }
            }';

Я считаю, что моя проблема связана с тем, что мои кавычки вставляют и выходят из строки. Однако я также не уверен, как обращаться к удалению запятой для последнего результата.

ты не можешь так поступать. создать переменную. назначьте значение итерации foreach этой переменной, а затем назначьте эту переменную вашему массиву json

Anant Kumar Singh 11.12.2018 05:26

Создавать Json-строку вручную - не лучшая идея. Лучше построить массив и преобразовать его в json

Andreas 11.12.2018 05:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно сначала присвоить значение переменной 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;

Другие вопросы по теме