У меня есть Json:
[{"name":"firstname","value":"wwwwww"},{"name":"lastname","value":"w"},{"name":"age","value":"99"},{"name":"sex","value":"male"}]
Как получить массив следующим образом:
array( 'firstname' => 'name', 'lastname' => 'surname', 'age' => '99', 'sex' => 'male' )
<?php echo '<pre>'; $x=json_decode('[{"name":"firstname","value":"wwwwww"},{"name":"lastname","value":"w"},{"name":"age","value":"99"},{"name":"sex","value":"male"}]',true); $out=array(); foreach ($x as $y){ $out[$y['name']]=$y['value']; } print_r($out);
Предполагая, что это единственный JSON, который у вас есть, давайте сохраним его в $json
для примера:
$json = '[{"name":"firstname","value":"wwwwww"},{"name":"lastname","value":"w"},{"name":"age","value":"99"},{"name":"sex","value":"male"}]';
Во-первых, json_decode
ваш JSON, чтобы мы могли использовать PHP для его обработки:
$data = json_decode($json);
Затем создайте массив для хранения обработанных данных, итерации по нему, получения и присвоения значений массиву для достижения вашей структуры желания:
$processed_data = array(); foreach($data as $data_field) { $processed_data[$data_field->name] = $data_field->value; }
Вот var_dump
полученного массива:
array(4) { ["firstname"]=> string(6) "wwwwww" ["lastname"]=> string(1) "w" ["age"]=> string(2) "99" ["sex"]=> string(4) "male" }
Легко. Просто используйте json_decode
и затем json_decode
массив с помощью foreach
следующим образом:
// JSON string as set in your example. $string = '[{"name":"first name","value":"wwwwww"},{"name":"last name","value":"w"},{"name":"age","value":"99"},{"name":"sex","value":"male"}]'; // Use `json_decode` to decode the JSON with the `true` setting to set output to an array. $array = json_decode($string, true); // Now roll through the array & set the final values. $final_values = array(); foreach ($array as $key => $value) { $final_values[$value['name']] = $value['value']; } // Dump the final values to check the reordering. echo '<pre>'; print_r($final_values); echo '</pre>';
Выход:
Array ( [first name] => wwwwww [last name] => w [age] => 99 [sex] => male )
Довольно простой цикл после декодирования с использованием json_decode()
.
<?php $json = '[{"name":"firstname","value":"wwwwww"},{"name":"lastname","value":"w"},{"name":"age","value":"99"},{"name":"sex","value":"male"}]'; $data = json_decode($json, true); $d=''; foreach($data as $item){ $d[$item['name']] = $item['value']; } print_r($data); print_r($d); ?>
Первый массив $data
гарантирует это возвращение:
Array ( [0] => Array ( [name] => firstname [value] => wwwwww ) [1] => Array ( [name] => lastname [value] => w ) [2] => Array ( [name] => age [value] => 99 ) [3] => Array ( [name] => sex [value] => male ) )
Хотя второй массив ( $d
), созданный в цикле foreach, гарантирует требуемое возвращение:
Array ( [firstname] => wwwwww [lastname] => w [age] => 99 [sex] => male )