Сохранение массива PHP как объекта в API

#php #arrays #api

#php #массивы #API

Вопрос:

Я работаю над пользовательской сборкой проекта с использованием PHP Laravel. Я захватил некоторые входные данные из формы и хочу сохранить их в API. В основном API принимает массив объектов. Я пытаюсь сохранить свои входные данные, но он сохраняет не все из них, а только первый.

Что требуется для API

 [
    {
        "dependant_name": "Dependant 1 ",
        "relationship": "Spouse",
        "date_of_birth": "1999-02-26"    
    },
      {
        "dependant_name": "Dependant 2",
        "relationship": "Child",
        "date_of_birth": "2008-11-21"    
    },
    {
        "dependant_name": "Dependant 3",
        "relationship": "Child",
        "date_of_birth": "2015-10-17"    
    }
]
  

Мои входные данные после сбора из формы

 $fn = [
  "fName1" => "Martoo",
  "fName2" => "dsjksdksd",
  "sName1" => "Njogu",
  "sName2" => "jkdsjsdk",
  "dob" => "07-04-2001",
  "dob1" => "06-04-2001",
  "relation1" => "Wife",
  "relation2" => "Son"
];
  

Мой код для проверки, существует ли ключ

  //If fName exist create only one array collection to suit API
    if(array_key_exists("fName1" , $fn)){ 
        $a=[
            'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
            'relationship' => $fn['relation1'],
            'date_of_birth' => $fn['dob']
        ];
    }

    //If fName and fName2 exists create 2 array collections to suit API
    if(array_key_exists("fName1" , $fn) amp;amp; array_key_exists("fName2" , $fn)){ 
        $a=[
            'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
            'relationship' => $fn['relation1'],
            'date_of_birth' => $fn['dob'],

            'dependant_name' => $fn['fName2'] . " " . $fn['sName2'],
            'relationship' => $fn['relation2'],
            'date_of_birth' => $fn['dob1']
        ];
    }

   dd($a);
  

После dd($ a) я получаю только 1-ю коллекцию массивов

Ответ №1:

Вам необходимо изменить структуру $a следующим образом

 if (array_key_exists("fName1", $fn)) {
    $a[] = [ // you were replacing $a every time here
        'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
        'relationship'   => $fn['relation1'],
        'date_of_birth'  => $fn['dob'],
    ];
}

//If fName and fName2 exists create 2 array collections to suit API
if (array_key_exists("fName1", $fn) amp;amp; array_key_exists("fName2", $fn)) {
    $a[] = [ // you were replacing $a every time here
        'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
        'relationship'   => $fn['relation1'],
        'date_of_birth'  => $fn['dob'],

        'dependant_name' => $fn['fName2'] . " " . $fn['sName2'],
        'relationship'   => $fn['relation2'],
        'date_of_birth'  => $fn['dob1'],
    ];
}

dd($a);
  

Ответ №2:

Вам нужно использовать array для хранения выходных данных. Вы можете использовать приведенный ниже код.

 $fn = [
  "fName1" => "Martoo",
  "fName2" => "dsjksdksd",
  "sName1" => "Njogu",
  "sName2" => "jkdsjsdk",
  "dob" => "07-04-2001",
  "dob1" => "06-04-2001",
  "relation1" => "Wife",
  "relation2" => "Son"
];
$a = array();
//If fName exist create only one array collection to suit API
if (array_key_exists("fName1", $fn)) {
  $a[] = array(
    'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
    'relationship' => $fn['relation1'],
    'date_of_birth' => $fn['dob']
  );
}

//If fName and fName2 exists create 2 array collections to suit API
if (array_key_exists("fName1", $fn) amp;amp; array_key_exists("fName2", $fn)) {
  $a[] = array(
    'dependant_name' => $fn['fName1'] . " " . $fn['sName1'],
    'relationship' => $fn['relation1'],
    'date_of_birth' => $fn['dob']
  );

  $a[] = array('dependant_name' => $fn['fName2'] . " " . $fn['sName2'],
    'relationship' => $fn['relation2'],
    'date_of_birth' => $fn['dob1']
  );
}
echo "<pre>";
print_r($a);