Nasıl dizinin anahtarı düzenlemek için?

3 Cevap php

O yapıldıktan sonra anahtarı düzenlemek mümkün mü?

Ben farklı bir anahtar ile bir dizi oluşturabilirsiniz biliyorum ama anahtar sonuncusunu düzenleme hakkında php sitede bir şey göremiyordu.

Orijinal dizi:

Array
(
    [0] => first
    [1] => color
)

Ne istiyorsunuz:

Array
(
    [newName] => first
    [1] => color
)

3 Cevap

Eğer bir öğenin anahtarını değiştirmek isterseniz, yeni bir anahtar ve unset() eski bir (bu teknik dizinin sırasını değiştirir) ile değerini ayarlamanız gerekir ya:

$arr['newName'] = $arr[0];
unset($arr[0]);

veya döngü forgoes ve sen gibi, tuşları değiştirmek için izin veren bir sarıcı kullanın:

function array_change_key(&$array, $search, $replace) {
    $keys = array_keys($array);
    $values = array_values($array);

    // Return FALSE if replace key already exists
    if(array_search($replace, $keys) !== FALSE) return FALSE;

    // Return FALSE if search key doesn't exists
    $searchKey = array_search($search, $keys); 
    if($searchKey === FALSE) return FALSE;

    $keys[$searchKey] = $replace;
    $array = array_combine($keys, $values);

    return TRUE; // Swap complete
}

Burada sürece tek bir çağrı her dizi için yeniden şifrelemenin her şeyi olduğu gibi, muhtemelen oldukça verimli bir alternatif, basit bir yaklaşım, var:

<?php
function mapKeys(array $arr, array $map) {
  //we'll build our new, rekeyed array here:
  $newArray = array();
  //iterate through the source array
  foreach($arr as $oldKey => $value) {
    //if the old key has been mapped to a new key, use the new one.  
    //Otherwise keep the old key
    $newKey = isset($map[$key]) ? $map[$key] : $oldKey;
    //add the value to the new array with the "new" key
    $newArray[$newKey] = $value;
  }
  return $newArray;
}

$arr = array('first', 'color');
$map = array(0 => 'newName');

print_r(mapKeys($arr, $map));
$array = array('foo', 'bar');

$array['newName'] = $array[0];
unset($array[0]);

Yani hemen hemen yapabileceğiniz tek şey bu.