PHP переименовывает ключи массива в многомерном массиве

В массиве, таком как ниже, как я мог переименовать «fee_id» в «id»?

Array ( [0] => Array ( [fee_id] => 15 [fee_amount] => 308.5 [year] => 2009 ) [1] => Array ( [fee_id] => 14 [fee_amount] => 308.5 [year] => 2009 ) ) 

 foreach ( $array as $k=>$v ) { $array[$k] ['id'] = $array[$k] ['fee_id']; unset($array[$k]['fee_id']); } с foreach ( $array as $k=>$v ) { $array[$k] ['id'] = $array[$k] ['fee_id']; unset($array[$k]['fee_id']); } 

Это должно работать

Вы можете использовать array_map () для этого.

 $myarray = array_map(function($tag) { return array( 'id' => $tag['fee_id'], 'fee_amount' => $tag['fee_amount'], 'year' => $tag['year'] ); }, $myarray); 
 $arrayNum = count($theArray); for( $i = 0 ; $i < $arrayNum ; $i++ ) { $fee_id_value = $theArray[$i]['fee_id']; unset($theArray[$i]['fee_id']); $theArray[$i]['id'] = $fee_id_value; } с $arrayNum = count($theArray); for( $i = 0 ; $i < $arrayNum ; $i++ ) { $fee_id_value = $theArray[$i]['fee_id']; unset($theArray[$i]['fee_id']); $theArray[$i]['id'] = $fee_id_value; } 

Это должно сработать.

Скопировать текущее значение «fee_id» в новый ключ с именем «id» и отменить предыдущий ключ?

 foreach ($array as $arr) { $arr['id'] = $arr['fee_id']; unset($arr['fee_id']); } с foreach ($array as $arr) { $arr['id'] = $arr['fee_id']; unset($arr['fee_id']); } 

Нет такой встроенной функции, которая делает такой тонкий афайк.

Это рабочее решение, я его протестировал.

 foreach ($myArray as &$arr) { $arr['id'] = $arr['fee_id']; unset($arr['fee_id']); } с foreach ($myArray as &$arr) { $arr['id'] = $arr['fee_id']; unset($arr['fee_id']); } 

Ниже приведенный ниже фрагмент переименует ассоциативный массив с сохранением порядка (иногда … мы должны). Вы можете заменить значение $ new нового ключа, если вам нужно полностью заменить элемент.

 $old_key = "key_to_replace"; $new_key = "my_new_key"; $intermediate_array = array(); while (list($key, $value) = each($original_array)) { if ($key == $old_key) { $intermediate_array[$new_key] = $value; } else { $intermediate_array[$key] = $value; } } $original_array = $intermediate_array; 

Converted 0-> feild0, 1-> field1,2-> field2 ….

Это всего лишь один пример, в котором я получаю значение, разделенное запятыми, в строке и преобразовываю его в многомерный массив, а затем используя foreach loop i измененное значение ключа массива

 <?php $str = "abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu; echo '<pre>'; $arr1 = explode("\n", $str); // this will create multidimensional array from upper string //print_r($arr1); foreach ($arr1 as $key => $value) { $arr2[] = explode(",", $value); foreach ($arr2 as $key1 => $value1) { $i =0; foreach ($value1 as $key2 => $value2) { $key3 = 'field'.$i; $i++; $value1[$key3] = $value2; unset($value1[$key2]); } } $arr3[] = $value1; } print_r($arr3); ?> с <?php $str = "abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu abc,def,ghi,jkl,mno,pqr,stu; echo '<pre>'; $arr1 = explode("\n", $str); // this will create multidimensional array from upper string //print_r($arr1); foreach ($arr1 as $key => $value) { $arr2[] = explode(",", $value); foreach ($arr2 as $key1 => $value1) { $i =0; foreach ($value1 as $key2 => $value2) { $key3 = 'field'.$i; $i++; $value1[$key3] = $value2; unset($value1[$key2]); } } $arr3[] = $value1; } print_r($arr3); ?> 

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

 $search = array('key1','key2','key3'); $replace = array('newkey1','newkey2','newkey3'); $resArray = str_replace($search,$replace,json_encode($array)); $res = json_decode($resArray); 

На этом пути мы можем избежать цикла и рекурсии.

Надеюсь, поможет.