- Переименовать ключи массива
- Php переименовать элемент массива
- Алгоритм замены ключа, имени ключа
- Пример замены ключа в массиве:
- Результат замены ключа в массиве.
- Вывод о замене ключа:
- Замена ключа без изменения положения ключа.
- Замена имени ключа в цикле.
- Замена ключа без изменения положения в массиве:
- Соберем весь код замены ключа на новый:
- Результат вывода замены ключа:
- Как переименовать ключи массива в PHP?
- 9 ответов
- PHP: Replace an array key.
- Replacing an array key.
- Replacing a key and preserving the order.
Переименовать ключи массива
Когда данные приходят с формы, было бы удобно использовать функцию, которая переименует ключи определенным образом (скажем в более подходящей для сохранения в БД).
Итак требуется переименовать ключи массива A, как переименовывать заданы массивом B. Желательно для те ключи, для которых переименование не задано — не трогать. Если заданы переименования ключей которых нет — не создавать такие ключи в результирующем массиве. Порядок ключей желательно оставить как в оригинальном массиве или сделать их в том порядке в котором они заданы в массиве переименований. Идеально было бы регулировать это дополнительным параметром)
И, конечно, все это без циклов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
$a = array( 'id' => 10, 'name' => 'Test 1', 'price_vat' => 234, 'price_sim' => 343, 'include' => 1, ); $b = array( 'id' => 'ID', 'name' => 'NAME', 'price_vat' => 'PRICE_1', 'price_sim' => 'PRICE_2', /*'include' => 'ACTIVE',*/ 'test' => 'ABC', ); /* $a = array( 'ID' => 10, 'NAME' => 'Test 1', 'PRICE_1' => 234, 'PRICE_2' => 343, 'include' => 1, ); */
Php переименовать элемент массива
Здесь немного нужно сказать о теории.
Нет такого .. простого способа или функции, которая возьмет и заменит ключ, именно ключ, имя ключа на другое. Просто нет и все.
Поэтому требуется несколько телодвижений.
Алгоритм замены ключа, имени ключа
(далее просто «замена ключа».)
Нам потребуется получить значение ячейки старого ключа, который мы хотим изменить, переименовать. Присвоить новому ключу значение старого ключа.
После того, как новый ключ создан со значением старого ключа . У нас получиться, что есть две ячейки с одинаковыми значениями, но два ключа, «старый ключ» и «новый ключ».
Следующим шагом — мы спокойно можем удалить старый ключ.
Пример замены ключа в массиве:
Для иллюстрации нам понадобится массив:
Выведем прямо здесь с помощью print_r:
Array(
[0] => Ячейка 1 [1] => Ячейка 2 [2] => Ячейка 3 [3] => Ячейка 4)
Предположим, что мы хотим заменить ключ второй ячейки, ключ №1.
1). Получаем значение ключа в новую ячейку:
Опять выведем, что у нас получилось — print_r($array_example);
Array(
[0] => Ячейка 1 [1] => Ячейка 2 [2] => Ячейка 3 [3] => Ячейка 4 [4] => Ячейка 2)
Для удаления строго ключа нам потребуется функция unset:
Результат замены ключа в массиве.
Array(
[0] => Ячейка 1 [2] => Ячейка 3 [3] => Ячейка 4 [4] => Ячейка 2)
Вывод о замене ключа:
При такой замене имени ключа, нарушается нумерация ключей. Теперь нам нужно(если нужно) восстановить нумерацию ключей
Array(
[0] => Ячейка 1 [1] => Ячейка 3 [2] => Ячейка 4 [3] => Ячейка 2)
Замена ключа без изменения положения ключа.
Но, что, если вам требуется сохранить положение ключа в массиве и заменить его имя — есть какие-то варианты?
Поскольку у меня на сайте есть множество данных хранимых в ассоциативных массивах, то и ключи периодически приходится заменять, но , чтобы место данного ключа не менялось!
Замена имени ключа в цикле.
Предположим, что у нас есть ассоциативный массив(приведем простой пример такого массива):
Array(
[помидоры] => 15 [огурцы] => 12 [петрушка] => 22 [бананы] => 16)
Замена ключа без изменения положения в массиве:
Предположим, что в выше приведенном массиве нам требуется изменить имя ключа номер 2(огурцы) на какое-то другое, без изменения положения в массиве, для этого вам понадоится:
Выше цикла создаем новый массив:
Для этого примера нам понадобится, цикл foreach
Внутри цикла создадим условие if и проверим, если ключ массива «огурцы»
То, создаем в цикле новый массив «$new_arr» с новым ключом «новые_огурцы» и значением старого ключа:
И далее. вернем в старый массив новый:
Соберем весь код замены ключа на новый:
foreach ($price as $key => $value)
Ну и далее. нам остается только вывести результат замены ключа в массиве, без изменения его положения:
Результат вывода замены ключа:
Array(
[помидоры] => 15 [новые_огурцы] => 12 [петрушка] => 22 [бананы] => 16)
16.09.2022 13:37 Сергей Fortoo
unset ($price[$key]);
Убить старый ключ нужно когда переименование ключа происходит в первоначальном массиве, а в данном примере, Вы создаёте новый массив, поэтому unset ($price[$key]); не нужен.
16.09.2022 14:58 Марат Сергей Fortoo
Как переименовать ключи массива в PHP?
Я хотел бы переименовать все ключи массивов под названием «url», которые будут называться «value». Что было бы хорошим способом сделать это?
9 ответов
Вы можете использовать array_map() , чтобы сделать это.
$tags = array_map(function($tag) < return array( 'name' =>$tag['name'], 'value' => $tag['url'] ); >, $tags);
быстрое примечание: вам нужно использовать PHP 5.6 или выше, в противном случае вы используете неподдерживаемую версию php и можете ожидать проблем с безопасностью.
Прокрутите, установите новый ключ, отмените старый ключ.
вы можете сделать что-то вроде этого
Говоря о функциональном PHP, у меня есть более общий ответ:
Это должно работать в большинстве версий 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 должно быть одинаковым. Однако, когда они не являются пустым ключом, добавляется. Это означает, что вы можете использовать его для добавления сортировки, если схема в ваш массив.
Используйте это все время, надеюсь, что это поможет!
Или вы можете просто использовать array_map ($ tags, create_function (‘$ tag’, ‘return array («name» => $ tag [«name»], «value» => $ tag [«url»]’));
Это становится грязным, когда вы систематически переименовываете. Также create_function использует eval, которого, по возможности, следует избегать.
PHP: Replace an array key.
This is a beginners tutorial on how to replace an array key in PHP. In the guide below, I will also demonstrate how to replace a key in an associative array while preserving the array’s original order.
Replacing an array key.
Let’s start off by creating a simple PHP array:
//Example associative PHP array $arr = array( 'user_name' => 'John', 'age' => 32, 'nationality' => 'English' ); //var_dump var_dump($arr);
If you var_dump the associative PHP array above, you will be given the following result:
Now, let’s say that you want to replace the key user_name with a new key called name. Firstly, you will need create the new key like so:
//Add the new key. $arr['name'] = $arr['user_name']; //var_dump var_dump($arr);
In the code above, we assigned the value of user_name to a new key called name. This leaves us with an array that looks like this:
As you can see, we now have two elements with the exact same value. This means that we can now delete the old key:
//Remove the old key. unset($arr['user_name']); //var_dump var_dump($arr);
Once you have removed the old key using PHP’s unset function, you will be left with the following array:
To sum it up: We ‘replaced’ the array key in question by assigning the element to a new key. Once the element was copied over, we were then able to remove the old key by using the unset function.
Replacing a key and preserving the order.
The code above does not preserve the original order of the array. As you probably noticed, the name of the person went from the top of the array to the bottom of the array. Although this won’t be a problem in the vast majority of cases, there could be scenarios where you need to replace an array key and preserve the original order.
In order to do this, you can use the custom PHP function below:
/** * Replaces an array key and preserves the original * order. * * @param $array The array in question. * @param $oldKey The key that you want to replace. * @param $newKey The name of the new key. * * @return array */ function replaceArrayKey($array, $oldKey, $newKey) < //If the old key doesn't exist, we can't replace it. if(!isset($array[$oldKey]))< return $array; >//Get a list of all keys in the array. $arrayKeys = array_keys($array); //Replace the key in our $arrayKeys array. $oldKeyIndex = array_search($oldKey, $arrayKeys); $arrayKeys[$oldKeyIndex] = $newKey; //Combine them back into one array. $newArray = array_combine($arrayKeys, $array); return $newArray; >
Here is an example of the replaceArrayKey function being used:
$arr = replaceArrayKey($arr, 'nationality', 'user_nationality'); var_dump($arr);
In the PHP code above, I replaced the key nationality with a new array key called user_nationality. If you run the example for yourself, you should get the following result:
And as promised, the original order of the array was preserved!