PHP에서 배열 키의 이름을 바꾸는 방법은 무엇입니까?
$ tags (다차원 배열)라는 변수에 var_dump를 지정하면 다음과 같은 결과가 나타납니다.
정렬 ( [0] => 어레이 ( [이름] => 탭 [url] => 탭 ) [1] => 어레이 ( [이름] => 태비 리디 만 [url] => tabby-ridiman ) [2] => 어레이 ( [이름] => 테이블 [url] => 테이블 ) [3] => 어레이 ( [이름] => 타블로이드 [url] => 타블로이드 ) [4] => 어레이 ( [이름] => 타코벨 [url] => 타코벨 ) [5] => 어레이 ( [이름] => 타코 [url] => 타코 ) )
"url"이라는 모든 배열 키의 이름을 "값"으로 바꾸고 싶습니다. 이를 수행하는 좋은 방법은 무엇입니까?
당신 array_map()
은 그것을 할 수 있습니다 .
$tags = array_map(function($tag) {
return array(
'name' => $tag['name'],
'value' => $tag['url']
);
}, $tags);
반복, 새 키 설정, 이전 키 설정 해제.
foreach($tags as &$val){
$val['value'] = $val['url'];
unset($val['url']);
}
기능적 PHP에 대해 이야기하면 더 일반적인 대답이 있습니다.
array_map(function($arr){
$ret = $arr;
$ret['value'] = $ret['url'];
unset($ret['url']);
return $ret;
}, $tag);
}
재귀 PHP 이름 바꾸기 키 기능 :
function replaceKeys($oldKey, $newKey, array $input){
$return = array();
foreach ($input as $key => $value) {
if ($key===$oldKey)
$key = $newKey;
if (is_array($value))
$value = replaceKeys( $oldKey, $newKey, $value);
$return[$key] = $value;
}
return $return;
}
이것은 대부분의 PHP 4+ 버전에서 작동합니다. 익명 함수를 사용하는 배열 맵은 5.3 이하에서 지원되지 않습니다.
또한 foreach 예제는 엄격한 PHP 오류 처리를 사용할 때 경고를 발생시킵니다.
다음은 작은 다차원 키 이름 변경 기능입니다. 또한 앱 전체에서 무결성을위한 올바른 키를 갖도록 배열을 처리하는 데 사용할 수 있습니다. 키가없는 경우 오류가 발생하지 않습니다.
function multi_rename_key(&$array, $old_keys, $new_keys)
{
if(!is_array($array)){
($array=="") ? $array=array() : false;
return $array;
}
foreach($array as &$arr){
if (is_array($old_keys))
{
foreach($new_keys as $k => $new_key)
{
(isset($old_keys[$k])) ? true : $old_keys[$k]=NULL;
$arr[$new_key] = (isset($arr[$old_keys[$k]]) ? $arr[$old_keys[$k]] : null);
unset($arr[$old_keys[$k]]);
}
}else{
$arr[$new_keys] = (isset($arr[$old_keys]) ? $arr[$old_keys] : null);
unset($arr[$old_keys]);
}
}
return $array;
}
사용법은 간단합니다. 예제와 같이 단일 키를 변경할 수 있습니다.
multi_rename_key($tags, "url", "value");
또는 더 복잡한 멀티 키
multi_rename_key($tags, array("url","name"), array("value","title"));
$ old_keys와 $ new_keys의 양이 같아야하는 preg_replace ()와 유사한 구문을 사용합니다. 그러나 빈 키가 아닌 경우 추가됩니다. 즉, 배열에 정렬 if 스키마를 추가하는 데 사용할 수 있습니다.
Use this all the time, hope it helps!
foreach ($basearr as &$row)
{
$row['value'] = $row['url'];
unset( $row['url'] );
}
unset($row);
class DataHelper{
private static function __renameArrayKeysRecursive($map = [], &$array = [], $level = 0, &$storage = []) {
foreach ($map as $old => $new) {
$old = preg_replace('/([\.]{1}+)$/', '', trim($old));
if ($new) {
if (!is_array($new)) {
$array[$new] = $array[$old];
$storage[$level][$old] = $new;
unset($array[$old]);
} else {
if (isset($array[$old])) {
static::__renameArrayKeysRecursive($new, $array[$old], $level + 1, $storage);
} else if (isset($array[$storage[$level][$old]])) {
static::__renameArrayKeysRecursive($new, $array[$storage[$level][$old]], $level + 1, $storage);
}
}
}
}
}
/**
* Renames array keys. (add "." at the end of key in mapping array if you want rename multidimentional array key).
* @param type $map
* @param type $array
*/
public static function renameArrayKeys($map = [], &$array = [])
{
$storage = [];
static::__renameArrayKeysRecursive($map, $array, 0, $storage);
unset($storage);
}
}
Use:
DataHelper::renameArrayKeys([
'a' => 'b',
'abc.' => [
'abcd' => 'dcba'
]
], $yourArray);
It is from duplicated question
$json = '[
{"product_id":"63","product_batch":"BAtch1","product_quantity":"50","product_price":"200","discount":"0","net_price":"20000"},
{"product_id":"67","product_batch":"Batch2","product_quantity":"50","product_price":"200","discount":"0","net_price":"20000"}
]';
$array = json_decode($json, true);
$out = array_map(function ($product) {
return array_merge([
'price' => $product['product_price'],
'quantity' => $product['product_quantity'],
], array_flip(array_filter(array_flip($product), function ($value) {
return $value != 'product_price' && $value != 'product_quantity';
})));
}, $array);
var_dump($out);
https://repl.it/@Piterden/Replace-keys-in-array
ReferenceURL : https://stackoverflow.com/questions/9605143/how-to-rename-array-keys-in-php
'developer tip' 카테고리의 다른 글
Heroku에서 Postgres DB 삭제 (0) | 2020.12.28 |
---|---|
Android : 터치 이벤트가 뷰에서 그 아래에있는 뷰로 전달되는 것을 방지하는 방법은 무엇입니까? (0) | 2020.12.28 |
조각 추가 또는 교체가 작동하지 않음 (0) | 2020.12.28 |
AngularJS ngRepeat 요소 제거 (0) | 2020.12.28 |
무엇입니까? : Kotlin에서 수행합니까? (0) | 2020.12.28 |