Intereting Posts
Невозможно переопределить ошибку класса при генерации отчета о покрытии кода PHPUnit Извлечение данных с веб-сайта через PHP Вычисление среднего цвета между двумя цветами в PHP, используя номер индекса в качестве эталонного значения Как реализовать Laravel 4 Частичные представления – привязка данных к частичным представлениям Вызов неопределенного метода PDO :: execute () доступ к удаленной базе данных php Как отлаживать запросы AJAX? Как узнать, какая функция PHP вызывается? Преобразование даты PHP в формат даты javascript Ошибка php-композитора opensl Проблема с отображением польских символов с использованием FPDF? Ошибка анализа: синтаксическая ошибка, неожиданное «else» (T_ELSE) как получить доступ к argv и параметрам вместе в php через аргументы командной строки вызов вложенной функции php codeigniter Какие маркеры можно параметризовать в подготовленных отчетах PDO? Извлечение Android Market mylibrary с завитком

PHP Изменить ключи массива

Array( 0 => 'blabla', 1 => 'blabla', 2 => 'blblll' ) etc.. 

Есть ли способ изменить все числовые клавиши на «Имя» без цикла через массив (так что функция php)?

Если у вас есть массив ключей, которые вы хотите использовать, используйте array_combine

Учитывая $ keys = array ('a', 'b', 'c', …) и ваш массив, $ list, выполните следующее:

 $list = array_combine($keys, array_values($list)); 

Список теперь будет массивом ('a' => 'blabla 1', …) и т. Д.

Вы должны использовать array_values чтобы извлекать только значения из массива, а не старые, числовые ключи.

Это красиво и просто выглядит, но array_values ​​создает целую копию массива, поэтому у вас могут возникнуть проблемы с пространством. Все, что мы делаем, это позволить php сделать цикл для нас, а не исключать цикл. У меня возникло бы желание сделать что-то большее:

 foreach ($list as $k => $v) { unset ($list[$k]); $new_key = *some logic here* $list[$new_key] = $v; } 

Я не думаю, что это все более эффективно, чем первый код, но он обеспечивает больший контроль и не будет иметь проблем с длиной массивов.

Нет, нет, для начала невозможно иметь массив с элементами, разделяющими один и тот же ключ

 $x =array(); $x['foo'] = 'bar' ; $x['foo'] = 'baz' ; #replaces 'bar' 

Во-вторых, если вы хотите просто префикс чисел, чтобы

 $x[0] --> $x['foo_0'] 

Это неправдоподобно делать без циклов. В настоящее время не существует функций php для задачи «key-prefixing», а ближайшая вещь – «extract», которая будет префиксными числовыми ключами до их преобразования.

Самый простой способ:

 function rekey( $input , $prefix ) { $out = array(); foreach( $input as $i => $v ) { if ( is_numeric( $i ) ) { $out[$prefix . $i] = $v; continue; } $out[$i] = $v; } return $out; } 

Кроме того, после чтения использования XMLWriter, я считаю, что вы плохо пишете XML.

 <section> <foo_0></foo_0> <foo_1></foo_1> <bar></bar> <foo_2></foo_2> </section> 

Не является хорошим XML.

 <section> <foo></foo> <foo></foo> <bar></bar> <foo></foo> </section> 

Лучше XML, потому что, когда intrepreted, имена, дублирующие, не имеют значения, потому что они все смещены так:

 section => { 0 => [ foo , {} ] 1 => [ foo , {} ] 2 => [ bar , {} ] 3 => [ foo , {} ] } 
 $prefix = '_'; $arr = array_combine( array_map(function($v) use ($prefix){ return $prefix.$v; }, array_keys($arr)), array_values($arr) ); 

Я добавил это для ответа на другой вопрос и, похоже, был уместным. Надеюсь, кто-то может помочь изменить значение ключей в массиве. Использует встроенные функции для php.

 $inputArray = array('app_test' => 'test', 'app_two' => 'two'); /** * Used to remap keys of an array by removing the prefix passed in * * Example: * $inputArray = array('app_test' => 'test', 'app_two' => 'two'); * $keys = array_keys($inputArray); * array_walk($keys, 'removePrefix', 'app_'); * $remappedArray = array_combine($keys, $inputArray); * * @param $value - key value to replace, should be from array_keys * @param $omit - unused, needed for prefix call * @param $prefix - prefix to string replace in keys */ function removePrefix(&$value, $omit, $prefix) { $value = str_replace($prefix, '', $value); } // first get all the keys to remap $keys = array_keys($inputArray); // perform internal iteration with prefix passed into walk function for dynamic replace of key array_walk($keys, 'removePrefix', 'app_'); // combine the rewritten keys and overwrite the originals $remappedArray = array_combine($keys, $inputArray); // see full output of comparison var_dump($inputArray); var_dump($remappedArray); 

Вывод:

 array(2) { 'attr_test' => string(4) "test" 'attr_two' => string(3) "two" } array(2) { 'test' => string(4) "test" 'two' => string(3) "two" } 

Я думаю, что он хочет:

 $a = array(1=>'first_name', 2=>'last_name'); $a = array_flip($a); $a['first_name'] = 3; $a = array_flip($a); print_r($a); 

Решение, когда вы используете XMLWriter (родной для PHP 5.2.x <), использует $xml->startElement('itemName'); это заменит ключ массива.

Использовать массив array_flip в php

 $array = array ( [1] => Sell [2] => Buy [3] => Rent [4] => Jobs ) print_r(array_flip($array)); Array ( [Sell] => 1 [Buy] => 2 [Rent] => 3 [Jobs] => 4 ) 

Я сделал это для массива объектов. Он в основном создает новые ключи в одном массиве и отключает старые ключи.

 public function transform($key, $results) { foreach($results as $k=>$result) { if( property_exists($result, $key) ) { $results[$result->$key] = $result; unset($results[$k]); } } return $results; } не public function transform($key, $results) { foreach($results as $k=>$result) { if( property_exists($result, $key) ) { $results[$result->$key] = $result; unset($results[$k]); } } return $results; } 
 <?php $array[$new_key] = $array[$old_key]; unset($array[$old_key]); ?> с <?php $array[$new_key] = $array[$old_key]; unset($array[$old_key]); ?> 

изменить имя массива «группа» на «дети».

 <?php echo json_encode($data); function array_change_key_name( $orig, $new, &$array ) { foreach ( $array as $k => $v ) { $res[ $k === $orig ? $new : $k ] = ( (is_array($v)||is_object($v)) ? array_change_key_name( $orig, $new, $v ) : $v ); } return $res; } echo '<br>=====change "group" to "children"=====<br>'; $new = array_change_key_name("group" ,"children" , $data); echo json_encode($new); ?> 

результат:

 {"benchmark":[{"idText":"USGCB-Windows-7","title":"USGCB: Guidance for Securing Microsoft Windows 7 Systems for IT Professional","profile":[{"idText":"united_states_government_configuration_baseline_version_1.2.0.0","title":"United States Government Configuration Baseline 1.2.0.0","group":[{"idText":"security_components_overview","title":"Windows 7 Security Components Overview","group":[{"idText":"new_features","title":"New Features in Windows 7"}]},{"idText":"usgcb_security_settings","title":"USGCB Security Settings","group":[{"idText":"account_policies_group","title":"Account Policies group"}]}]}]}]} =====change "group" to "children"===== {"benchmark":[{"idText":"USGCB-Windows-7","title":"USGCB: Guidance for Securing Microsoft Windows 7 Systems for IT Professional","profile":[{"idText":"united_states_government_configuration_baseline_version_1.2.0.0","title":"United States Government Configuration Baseline 1.2.0.0","children":[{"idText":"security_components_overview","title":"Windows 7 Security Components Overview","children":[{"idText":"new_features","title":"New Features in Windows 7"}]},{"idText":"usgcb_security_settings","title":"USGCB Security Settings","children":[{"idText":"account_policies_group","title":"Account Policies group"}]}]}]}]} 

Чтобы иметь тот же ключ, я думаю, что они должны быть в отдельных вложенных массивах.

 for ($i = 0; $i < count($array); $i++) { $newArray[] = ['name' => $array[$i]]; }; 

Вывод:

 0 => array:1 ["name" => "blabla"] 1 => array:1 ["name" => "blabla"] 2 => array:1 ["name" => "blblll"] 

Вы можете создать новый массив, содержащий этот массив, так что:

 <?php $array = array(); $array['name'] = $oldArray; ?>