Ответ 1
Вы можете использовать array_map()
, чтобы сделать это.
$tags = array_map(function($tag) {
return array(
'name' => $tag['name'],
'value' => $tag['url']
);
}, $tags);
Когда я var_dump для переменной с именем $tags (многомерный массив), я получаю следующее:
Array ( [0] => Array ( [name] => tabbing [url] => tabbing ) [1] => Array ( [name] => tabby ridiman [url] => tabby-ridiman ) [2] => Array ( [name] => tables [url] => tables ) [3] => Array ( [name] => tabloids [url] => tabloids ) [4] => Array ( [name] => taco bell [url] => taco-bell ) [5] => Array ( [name] => tacos [url] => tacos ) )
Я хотел бы переименовать все ключи массивов под названием "url", которые будут называться "value". Что было бы хорошим способом сделать это?
Вы можете использовать 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']);
}
вы можете сделать что-то вроде этого
foreach($tags as &$tag){
$tag['value'] = $tag['url'];
unset($tag['url']);
}
Говоря о функциональном PHP, у меня есть более общий ответ:
array_map(function($arr){
$ret = $arr;
$ret['value'] = $ret['url'];
unset($ret['url']);
return $ret;
}, $tag);
}
Это должно работать в большинстве версий 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");
или более сложный multikey
multi_rename_key($tags, array("url","name"), array("value","title"));
Он использует аналогичный синтаксис как preg_replace(), где количество $old_keys и $new_keys должно быть одинаковым. Однако, когда они не являются пустым ключом, добавляется. Это означает, что вы можете использовать его для добавления сортировки, если схема в ваш массив.
Используйте это все время, надеюсь, что это поможет!
foreach ($basearr as &$row)
{
$row['value'] = $row['url'];
unset( $row['url'] );
}
Функция рекурсивных переименований 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;
}
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);
}
}
Использование:
DataHelper::renameArrayKeys([
'a' => 'b',
'abc.' => [
'abcd' => 'dcba'
]
], $yourArray);
Это из дублированного вопроса
$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);