2017-01-04 8 views
2

массив $ установки [ 'ВидСчета']:PHP - массив объектов в JSON

$setting['accountType']['all'] = 'ALL'; 
$setting['accountType']['A1'] = 'VIP1'; 
$setting['accountType']['A2'] = 'VIP2'; 

PHP код для генерации объекта:

$object = new stdClass(); 
    $myArray = array(); 
    foreach ($setting['accountType'] as $key => $val) 
    {      
     $object->id = $key; 
     $object->desc = $val; 
     $myArray[] = $object;  
    } 
    $accountType = $myArray; 

PHP код для форматирования объекта в JSON:

json_encode(['accountType'=> [(object)$accountType])); 

Однако я получаю выход, как показано ниже:

"accountType": [{ 
    "0": { 
     "id": "A2", 
     "desc": "VIP" 
    }, 
    "1": { 
     "id": "A2", 
     "desc": "VIP" 
    }, 
    "2": { 
     "id": "A2", 
     "desc": "VIP" 
    } 
}] 

Проблема 1: почему $ accountType поддерживает только последний объект, когда я прохожу через цикл?

Задача 2: без ключа массива $ ВидСчета [решена с помощью array_values ​​($ ВидСчета)]

Это то, что я пытаюсь достичь:

"accountType": [{ 
     "id": "all", 
     "desc": "All " 
    }, { 
     "id": "A1", 
     "desc": "Normal" 
    }, { 
     "id": "A2", 
     "desc": "VIP" 
    }] 

Как получить выход, как указано выше?

+0

Почему вы хотите быть объектом 'stdClass'? –

+0

Можете ли вы напечатать $ setting ['accountType']? – rahulsm

+0

'json_encode (['accountType' => $ accountType]);' – bansi

ответ

1

Вы должны использовать

json_encode(['accountType'=> $accountType]); 

вместо

json_encode(['accountType'=> [(object)$accountType]]); 

В своем коде вы ставите $accountType внутри другого массива, поэтому вы получаете этот результат

Вот Demo and Explanation

Редактировать: Весь код

$setting['accountType']['all'] = 'ALL'; 
$setting['accountType']['A1'] = 'VIP1'; 
$setting['accountType']['A2'] = 'VIP2'; 

$myArray = array(); 
foreach ($setting['accountType'] as $key => $val) 
{      
    $object = new stdClass(); // Note: $object should be created inside the loop 
    $object->id = $key; 
    $object->desc = $val; 
    $myArray[] = $object;  
} 
$accountType = $myArray; 
echo json_encode(['accountType'=> $accountType]); 

А вот Revised Demo

+0

Почему я получаю повторяющееся значение, когда я перехожу через параметр $ ['accountType'] и назначаю $ dealStatus? –

+0

Вы имеете в виду в демо? там дата только для образца и повторила ее 3 раза, чтобы получить больше данных. Цикл, который вы используете для генерации, отлично подходит для использования 'json_encode (['accountType' => $ dealStatus]);'. – bansi

+0

Я изменил демо, и вы можете видеть, что он хранит {"id": "A1", "desc": "VIP1"}, а первый объект {"id": "A2", "desc": " VIP "} отсутствует в $ accountType –

1

Попробуйте это,

echo json_encode(array_values($your_array)); 

Позвольте мне знать, если его работы

+0

@V для Vendetta ok, это часть ответа, который я ищу ... thx –

+0

Вы всегда рады !!! – rahulsm

0

Это точно то же самое, нет? Нумерация отображается, потому что она вам нужна для доступа к конкретному объекту json. У вас есть массив, и вы можете получить доступ к каждому элементу по его ключу.

Смежные вопросы