PHP di chuyển phần tử mảng về đầu

Nói chung, tôi nghĩ rằng bạn đang nghĩ sai về mảng kết hợp [không phải "liên kết"]. Thông thường, người ta không sử dụng mảng kết hợp khi thứ tự phần tử mảng cần được đảm bảo. Đây là những gì các mảng được lập chỉ mục bằng số dành cho. Bạn nên cảnh báo rằng PHP không có chức năng tích hợp sẵn để xử lý thứ tự của các mảng kết hợp giống như đối với các mảng được lập chỉ mục bằng số

Bây giờ, nếu bạn cần có các kết hợp khóa-giá trị như bạn trình bày ở đây và có thể hiển thị chúng theo một thứ tự nhất định, có lẽ khi chúng được lặp lại cho đầu ra [đây thực sự là trường hợp sử dụng duy nhất mà tôi có thể nghĩ đến vì lý do tại sao bạn

Trước tiên, bạn có thể tạo một mảng được lập chỉ mục bằng số tham chiếu đến mảng giá trị chính và sử dụng mảng này để lặp lại

Ví dụ

$keyValueArray = ['foo1' => 'bar', 'foo2' => 'buzz', 'foo3' => 'bazz'];
$keyOrder = ['foo1', 'foo2', 'foo3'];

Bây giờ, nếu bạn muốn thay đổi "thứ tự" của các cặp khóa-giá trị, bạn chỉ cần thực hiện việc đó trong mảng $keyOrder. Và sau đó lặp lại như thế này

foreach[$keyOrder as $key] {
    echo $keyValueArray[$key];
}

Ngoài ra, bạn có thể thấy việc xây dựng một mảng các đối tượng [hoặc mảng các mảng kết hợp] sẽ trực quan hơn

$yourArray = [
    [object] ['foo1' => 'bar'],
    [object] ['foo2' => 'buzz'],
    [object] ['foo3' => 'bazz']
];

function placeObjectBeforeByKey[array $arr, string $key, string $before]
{
    $keyIdx = null;
    $beforeIdx = null;
    foreach[$arr as $idx => $obj] {
        if[isset[$obj[$key]]] {
            $keyIdx = $idx;
        }
        if[isset[$obj[$before]]] {
            $beforeIdx = $idx;
        }
        if[!is_null[$keyIdx] && !is_null[$beforeIdx]] {
            break;
        }
    }
    if[is_null[$keyIdx] || is_null[$beforeIdx]] {
        // bad input, perhaps throw exception or log error and return $arr unaltered
    }
    if[$keyIdx === $beforeIdx] {
        // same object had matching keys for both $key and $before
        // perhaps throw exception or just return $arr unaltered
        return $arr;
    }
    $keySlice = array_splice[$arr, $keyIdx, 1];
    if[$keyIdx < $beforeIdx] $beforeIdx--;
    array_splice[$arr, $beforeIdx, 0, $keySlice];
}

Lưu ý rằng về bản chất, một trong hai cách tiếp cận này thực hiện giống như những gì bạn làm trong hàm của mình, khi bạn đang sử dụng array_keys[] để tạo một mảng mới từ đầu. Sự khác biệt chính so với cách tiếp cận của bạn và các giải pháp thay thế mà tôi đề xuất là bạn minh bạch hơn đối với các vùng mã khác xung quanh cách đạt được thứ tự của các cặp khóa-giá trị cơ bản này. Đối với tôi, nếu tôi là nhà phát triển chọn cơ sở mã của bạn và tôi thấy rằng bạn chỉ đang sử dụng một mảng kết hợp, tôi sẽ không mong đợi điều này ngụ ý bất kỳ thứ tự nào, trong khi nếu bạn đưa cho tôi một mảng đối tượng/mảng hoặc một mảng

Hàm array_shift[] loại bỏ phần tử đầu tiên khỏi một mảng và trả về giá trị của phần tử đã loại bỏ

Ghi chú. Nếu các khóa là số, tất cả các phần tử sẽ nhận được các khóa mới, bắt đầu từ 0 và tăng thêm 1 [Xem ví dụ bên dưới]

âm dài

Đăng ngày 12 tháng 1 năm 2010

âm dài

  • Các thành viên
    • 75

    • Chia sẻ

Đăng ngày 12 tháng 1 năm 2010

Tôi có một mảng kết hợp, vd

 

array['a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D']

Tôi muốn có thể di chuyển một phần tử từ đầu, giữ nguyên thứ tự của các phần tử khác

 

vì vậy nếu tôi đặt

 

$start = 'c';

tôi sẽ lấy

 

array[ 'c' => 'C', 'a' => 'A', 'b' => 'B','d' => 'D']

 

Có một cách đơn giản để làm điều này?

 

[Phiên bản PHP. 5. 2. 10 ]

  • Trích dẫn

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

thebadbad

Đăng ngày 12 tháng 1 năm 2010

thebadbad

  • Các thành viên
    • 1. 6k
  • Địa điểm. Đan mạch

    • Chia sẻ

Đăng ngày 12 tháng 1 năm 2010

Không thanh lịch lắm, nhưng làm được việc

 

  • Trích dẫn

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

xà lách

Đăng ngày 12 tháng 1 năm 2010

xà lách

  • cựu nhân viên
    • 1. 8k
  • Địa điểm. Edinburg, Scotland

    • Chia sẻ

Đăng ngày 12 tháng 1 năm 2010

Đây là một cách khác để làm điều đó

 

$array = array['a' => 'A', 'b' => 'B', 'c' => 'C', 'd' => 'D'];
$new = array['c' => $array['c']] + $array;
print_r[$new];

  • Trích dẫn

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

âm dài

Đăng ngày 13 tháng 1 năm 2010

âm dài

  • Các thành viên
    • 75

  • Tác giả

    • Chia sẻ

Đăng ngày 13 tháng 1 năm 2010

Cảm ơn, đó là tốt đẹp và đơn giản

  • Trích dẫn

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

Mảng PHP có bắt đầu từ 1 không?

PHP cho phép bạn tạo 2 loại mảng. Mảng được lập chỉ mục có chỉ số số. Thông thường, các chỉ số trong một mảng được lập chỉ mục bắt đầu từ 0 , vì vậy phần tử đầu tiên có chỉ số là 0 , phần tử thứ hai có chỉ số là 1 , v.v.

Mảng PHP có bắt đầu từ 0 hay 1 không?

Cú pháp "chỉ mục => giá trị", được phân tách bằng dấu phẩy, xác định chỉ mục và giá trị. chỉ số có thể là kiểu chuỗi hoặc số nguyên. Khi chỉ mục bị bỏ qua, chỉ mục số nguyên sẽ tự động được tạo, bắt đầu từ 0 . Nếu chỉ mục là một số nguyên, chỉ mục được tạo tiếp theo sẽ là chỉ số nguyên lớn nhất + 1.

Làm cách nào để lấy giá trị đầu tiên từ mảng trong PHP?

Có một số phương pháp để lấy phần tử đầu tiên của một mảng trong PHP. Một số phương thức là sử dụng vòng lặp foreach, hàm đặt lại, hàm array_slice, array_values, array_reverse , v.v.

Làm cách nào để thay đổi chỉ mục của một mảng trong PHP?

Việc lập chỉ mục lại của một mảng có thể được thực hiện bằng cách sử dụng một số hàm sẵn có cùng nhau . Các chức năng này là. hàm array_combine[]. Hàm array_combine[] là một hàm sẵn có trong PHP, được sử dụng để kết hợp hai mảng và tạo một mảng mới bằng cách sử dụng một mảng cho các khóa và một mảng khác cho các giá trị.

Chủ Đề