Dışı endeksli çünkü tamamen bu sözü eğer emin değil, bu zor nedenidir.
En atalım:
$arrOrig = array(
'fruit'=>'pear',
'veg'=>'cucumber',
'tuber'=>'potato'
);
Tuşları alın:
$arrKeys = array_keys($arrOrig);
print_r($arrKeys);
Array(
[0]=>fruit
[1]=>veg
[2]=>tuber
)
Değerleri elde edersiniz:
$arrVals = array_values($arrOrig);
print_r($arrVals);
Array(
[0]=>pear
[1]=>cucumber
[2]=>potato
)
Şimdi sayısal 2 Hangi diziler var. Takas etmek istediğiniz olanların endeksleri Swap, daha sonra değiştirilmiş sayısal dizinin sırayla geri diğer dizi okudum. Kullanıcının biz 'meyve' ve 'sebze' takas etmek istediğinizi varsayalım:
$arrKeysFlipped = array_flip($arrKeys);
print_r($arrKeysFlipped);
Array (
[fruit]=>0
[veg]=>1
[tuber]=>2
)
$indexFruit = $arrKeysFlipped['fruit'];
$indexVeg = $arrKeysFlipped['veg'];
$arrKeysFlipped['veg'] = $indexFruit;
$arrKeysFlipped['fruit'] = $indexVeg;
print_r($arrKeysFlipped);
Array (
[fruit]=>1
[veg]=>0
[tuber]=>2
)
Şimdi, diziyi geri takas edebilirsiniz:
$arrKeys = array_flip($arrKeysFlipped);
print_r($arrKeys);
Array (
[0]=>veg
[1]=>fruit
[2]=>tuber
)
Şimdi, yeniden düzenlenmiş tuşlarının 'sipariş' Oringal dizi geçerek bir dizi oluşturabilirsiniz.
$arrNew = array ();
foreach($arrKeys as $index=>$key) {
$arrNew[$key] = $arrOrig[$key];
}
print_r($arrNew);
Array (
[veg]=>cucumber
[fruit]=>pear
[tuber]=>potato
)
Ben bu test değil - ama bu ne beklersiniz, değil. Bu, en azından her türlü yardımı sağlıyor mu? İyi şanslar :)
Eğer bir fonksiyon içine koyabilirsiniz $arrNew = array_swap_assoc($key1,$key2,$arrOld);
<?php
if(!function_exists('array_swap_assoc')) {
function array_swap_assoc($key1='',$key2='',$arrOld=array()) {
$arrNew = array ();
if(is_array($arrOld) && count($arrOld) > 0) {
$arrKeys = array_keys($arrOld);
$arrFlip = array_flip($arrKeys);
$indexA = $arrFlip[$key1];
$indexB = $arrFlip[$key2];
$arrFlip[$key1]=$indexB;
$arrFlip[$key2]=$indexA;
$arrKeys = array_flip($arrFlip);
foreach($arrKeys as $index=>$key) {
$arrNew[$key] = $arrOld[$key];
}
} else {
$arrNew = $arrOld;
}
return $arrNew;
}
}
?>
UYARI: Sadece kullanmadan önce bu test ve hata ayıklama - Lütfen hiçbir test tüm yapılmıştır.