Hướng dẫn how do i change the key of an array element in php? - làm cách nào để thay đổi khóa của một phần tử mảng trong php?

$arr[$newkey] = $arr[$oldkey];
unset[$arr[$oldkey]];

Đã trả lời ngày 27 tháng 10 năm 2008 lúc 17:12Oct 27, 2008 at 17:12

11

Cách bạn sẽ làm điều này và bảo tồn thứ tự của mảng là bằng cách đặt các phím mảng vào một mảng riêng biệt, tìm và thay thế phím trong mảng đó và sau đó kết hợp lại với các giá trị.

Đây là một chức năng chỉ làm điều đó:

function change_key[ $array, $old_key, $new_key ] {

    if[ ! array_key_exists[ $old_key, $array ] ]
        return $array;

    $keys = array_keys[ $array ];
    $keys[ array_search[ $old_key, $keys ] ] = $new_key;

    return array_combine[ $keys, $array ];
}

Đã trả lời ngày 23 tháng 1 năm 2014 lúc 4:57Jan 23, 2014 at 4:57

4

Nếu

$newarr[$newkey] = $oldarr[$oldkey];
$oldarr=$newarr;
unset[$newarr];
9 của bạn được xây dựng từ truy vấn cơ sở dữ liệu, bạn có thể thay đổi khóa trực tiếp từ câu lệnh
$array = [
    'old1' => 1
    'old2' => 2
];

$renameMap = [
    'old1' => 'new1',   
    'old2' => 'new2'
];

$array = array_combine[array_map[function[$el] use [$renameMap] {
    return $renameMap[$el];
}, array_keys[$array]], array_values[$array]];

/*
$array = [
    'new1' => 1
    'new2' => 2
];
*/
0:

thay vì

"select ´id´ from ´tablename´..."

Sử dụng một cái gì đó như:

"select ´id´ **as NEWNAME** from ´tablename´..."

Ram Sharma

8,5667 Huy hiệu vàng44 Huy hiệu bạc55 Huy hiệu Đồng7 gold badges44 silver badges55 bronze badges

Đã trả lời ngày 16 tháng 11 năm 2010 lúc 17:00Nov 16, 2010 at 17:00

1

Câu trả lời từ kernelm là tốt, nhưng để tránh vấn đề được đưa ra bởi Greg trong bình luận [khóa xung đột], sử dụng một mảng mới sẽ an toàn hơn

$newarr[$newkey] = $oldarr[$oldkey];
$oldarr=$newarr;
unset[$newarr];

Đã trả lời ngày 26 tháng 12 năm 2010 lúc 7:03Dec 26, 2010 at 7:03

KJGKJGkjg

2582 Huy hiệu bạc6 Huy hiệu Đồng2 silver badges6 bronze badges

2

$array = [
    'old1' => 1
    'old2' => 2
];

$renameMap = [
    'old1' => 'new1',   
    'old2' => 'new2'
];

$array = array_combine[array_map[function[$el] use [$renameMap] {
    return $renameMap[$el];
}, array_keys[$array]], array_values[$array]];

/*
$array = [
    'new1' => 1
    'new2' => 2
];
*/

Đã trả lời ngày 5 tháng 4 năm 2016 lúc 19:57Apr 5, 2016 at 19:57

Temuritemuritemuri

2.7175 huy hiệu vàng40 Huy hiệu bạc61 Huy hiệu đồng5 gold badges40 silver badges61 bronze badges

2

Bạn có thể sử dụng một mảng liên kết thứ hai ánh xạ các tên có thể đọc được của con người vào ID. Điều đó cũng sẽ cung cấp một mối quan hệ nhiều đến 1. Sau đó làm một cái gì đó như thế này:

echo 'Widgets: ' . $data[$humanreadbleMapping['Widgets']];

Đã trả lời ngày 27 tháng 10 năm 2008 lúc 17:12Oct 27, 2008 at 17:12

Tom Rittertom RitterTom Ritter

98.8K30 Huy hiệu vàng135 Huy hiệu bạc172 Huy hiệu đồng30 gold badges135 silver badges172 bronze badges

Nếu bạn cũng muốn vị trí của khóa mảng mới giống như cái cũ mà bạn có thể làm điều này:

function change_array_key[ $array, $old_key, $new_key] {
    if[!is_array[$array]]{ print 'You must enter a array as a haystack!'; exit; }
    if[!array_key_exists[$old_key, $array]]{
        return $array;
    }

    $key_pos = array_search[$old_key, array_keys[$array]];
    $arr_before = array_slice[$array, 0, $key_pos];
    $arr_after = array_slice[$array, $key_pos + 1];
    $arr_renamed = array[$new_key => $array[$old_key]];

    return $arr_before + $arr_renamed + $arr_after;
}

Đã trả lời ngày 27 tháng 1 năm 2015 lúc 10:43Jan 27, 2015 at 10:43

Spreadzzspreadzzspreadzz

2703 Huy hiệu bạc10 Huy hiệu đồng3 silver badges10 bronze badges

So sánh điểm chuẩn đơn giản của cả hai giải pháp.

Giải pháp 1 Sao chép và Xóa [Đặt hàng bị mất, nhưng cách nhanh hơn] //stackoverflow.com/a/240676/1617857

Bài Viết Liên Quan

Chủ Đề