Изменить вид массива PHP

Тема в разделе "PHP", создана пользователем Menro, 7 авг 2019.

Модераторы: latteo
  1. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    681
    Симпатии:
    129
    Добрый день!
    Извините, но сам догнать не могу. Попытки что-то придумать, пока безуспешны. Поэтому вынужден попросить помощи.

    Есть массив $array, который формируется путём запроса в таблице в базе данных.

    Код:
    Array
    (
        [0] => stdClass Object
            (
                [email] => email@gmail.com
                [first_name] => z
                [phone_1] => 5464565464
            )
    
        [1] => stdClass Object
            (
                [email] => email@gmail.com
                [first_name] => Игорь
                [phone_1] => 45645645654
            )
    )
    Мне необходимо его изменить на такой вид:

    PHP:
    [
      {
        
    "email""email@gmail.com",
        
    "variables": {
          
    "name""z",
          
    "phone""5464565464"
        
    }
      },
      {
        
    "email""email@gmail.com",
        
    "variables": {
          
    "name""Иван",
          
    "phone""5545521466"
        
    }
      }
    ]
    Речь идет не о JSON, а именно о вложенности и изменении названия свойств.
     
  2. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    681
    Симпатии:
    129
    Сделал, спасибо за внимание.

    Код:
    $db =&JFactory::getDBO();
    $query = "SELECT `email`, `first_name`, `phone_1` FROM `order_userinfos`";
    $db->setQuery($query);
    $result = $db->loadObjectList();
    
    $array = array();
    foreach ($result as $key => $value) {
        $array = [
        "email" =>$value->email,
        "variables" => array(
             "phone" => $value->phone_1,
            "name" => $value->first_name
        )
        ];
    }
    Если это криво, и не правильно, то буду признателен за правильные решения.
     
  3. UJy

    UJy

    Регистр.:
    23 авг 2011
    Сообщения:
    380
    Симпатии:
    134
    Вариант с пересборкой нового массива "в лоб" не подходит?
    Код:
    $new_array = [];
    
    foreach($your_current_array as $key => $array)
    {
        $new_array[] = 
            {
                'email' => $array->email, 
                'variables' => 
                    {
                        'name' => $array->first_name,
                        'phone' => $array->phone_1
                    }
            }
    }
    
    var_dump($new_array);
    
    Ну либо тем же форичом пройтись и добавить новое своство, которое содержит набор предыдущих...
    Код:
    foreach($your_current_array as $key => $array)
    {
        $your_current_array[$key]->variables = 
            {
                'name' => $array->first_name,
                'phone' => $array->phone_1
            }
    }
    
    На выходе должны получить почти что нужно:
    Код:
    Array
    (
        [0] => stdClass Object
            (
                [email] => email@gmail.com
                [first_name] => z
                [phone_1] => 5464565464
                [variables] => {
                    [name] => "z",
                    [phone] => "5545521466"
                }
            )
    
        [1] => stdClass Object
            (
                [email] => email@gmail.com
                [first_name] => Игорь
                [phone_1] => 45645645654
                [variables] => {
                    [name] => "Игорь",
                    [phone] => "45645645654"
                }
            )
    )
    
     
    verfaa и Menro нравится это.
  4. Java

    Java

    Регистр.:
    14 окт 2011
    Сообщения:
    161
    Симпатии:
    41
    в запросе к БД указать что нужен массив, а не объект.
     
    AlkosFm нравится это.