Я генерирую json из массива с помощью json_encode()
, он работает правильно, но он использует значение key: из массива, как обычно. но я хочу изменить имя ключа только в json-выходе .. возможно ли это сделать? или я должен подготовить ключ json: значения самостоятельно?
Пример:
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr);
O / P
{"a":1,"b":2,"c":3,"d":4,"e":5}
Мне нужно .
{"foo":1,"something":2,"bar":3,"foo":4,"baz":5}
edit: я не могу отредактировать исходный массив .. (сгенерированный с помощью framweork)
Только если вы переписываете себя. Вы можете использовать:
$rewriteKeys = array('a' => 'foo', 'b' => 'something', 'c' => 'bar', 'd' => 'foo', 'e' => 'baz'); $newArr = array(); foreach($arr as $key => $value) { $newArr[ $rewriteKeys[ $key ] ] = $value; } echo json_encode($newArr);
Не уверен, что это то, к чему вы стремились.
Вы всегда можете json_decode
а затем перекодировать его. Но это будет проще всего, если вы просто подготовите свои ключи, прежде чем закодировать их.
Существует еще один вариант, который я описал здесь . Основная идея состоит в том, чтобы рассматривать JSON как строку, а затем использовать str_replace или preg_replace (str_replace for regexp).
Для вашего дела есть код.
$mapping_array = array('a' => 'foo', 'b' => 'something', 'c' => 'bar', 'd' => 'foo', 'e' => 'baz'); $tmp_arr = array_map(function($k){ return '/\b'.$k.'\b/u'; }, array_keys($mapping_array)); $new_json = preg_replace($tmp_arr, array_values($mapping_array), $old_json);