Đặt lại khóa của các phần tử mảng trong php?


124

Câu hỏi là làm thế nào để đặt lại khóa, ví dụ: cho một mảng:

Array ( 
    [1_Name] => Array ( 
        [1] => leo 
        [4] => NULL 
    ) 
    [1_Phone] => Array ( 
        [1] => 12345 
        [4] => 434324
    )  
)

đặt lại thành:

Array ( 
    [1_Name] => Array ( 
        [0] => leo 
        [1] => NULL 
    ) 
    [1_Phone] => Array ( 
        [0] => 12345 
        [1] => 434324
    ) 
)

Kiểm tra câu trả lời sau: stackoverflow.com/questions/5943149/…
Web_Developer

Câu trả lời:


295

Để đặt lại khóa của tất cả các mảng trong một mảng:

$arr = array_map('array_values', $arr);

Trong trường hợp bạn chỉ muốn đặt lại các khóa mảng cấp một, hãy sử dụng array_values()mà không array_map.


9
Không thiết lập lại các phím của mảng của tôi vì lý do nào đó, phải sử dụng chỉ array_valueshàm.
SSH này

1
@SSH Bạn có sử dụng nó trên một mảng mảng , như được gọi ở đây không?
dối trá

1
Không, đó là vấn đề, tôi nghĩ rằng điều này được cho là "Đặt lại khóa của các phần tử mảng", nó không.
SSH này

3
bạn không cần sử dụng array_map: $ ret = array_values ​​($ ret); là đủ để đặt lại các phím số
Marek Lewandowski

2
Tôi không biết liệu việc sử dụng array_values ​​để đặt lại giá trị có được ghi lại hay không, nhưng nó phải như vậy. Điều này thực sự đã giúp cắt giảm số dòng tôi đang viết :)
cacbontwelve 21/09/13

193
$array[9] = 'Apple';
$array[12] = 'Orange';
$array[5] = 'Peach';

$array = array_values($array);

thông qua chức năng này, bạn có thể đặt lại mảng của mình

$array[0] = 'Apple';
$array[1] = 'Orange';
$array[2] = 'Peach';

Giải pháp này đã hiệu quả với tôi
Amirhossein Tarmast


8

Ở đây, bạn có thể thấy sự khác biệt giữa cách mà lừa dối đưa ra so với array_valuescách tiếp cận đơn giản :

Mảng:

$array['a'][0] = array('x' => 1, 'y' => 2, 'z' => 3);
$array['a'][5] = array('x' => 4, 'y' => 5, 'z' => 6);

$array['b'][1] = array('x' => 7, 'y' => 8, 'z' => 9);
$array['b'][7] = array('x' => 10, 'y' => 11, 'z' => 12);

Nói decezecách khác, đây là đầu ra của bạn:

$array = array_map('array_values', $array);
print_r($array);

/* Output */

Array
(
    [a] => Array
        (
            [0] => Array
                (
                    [x] => 1
                    [y] => 2
                    [z] => 3
                )
            [1] => Array
                (
                    [x] => 4
                    [y] => 5
                    [z] => 6
                )
        )
    [b] => Array
        (
            [0] => Array
                (
                    [x] => 7
                    [y] => 8
                    [z] => 9
                )

            [1] => Array
                (
                    [x] => 10
                    [y] => 11
                    [z] => 12
                )
        )
)

Và đây là đầu ra của bạn nếu bạn chỉ sử dụng array_valueshàm:

$array = array_values($array);
print_r($array);

/* Output */

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [x] => 1
                    [y] => 2
                    [z] => 3
                )
            [5] => Array
                (
                    [x] => 4
                    [y] => 5
                    [z] => 6
                )
        )
    [1] => Array
        (
            [1] => Array
                (
                    [x] => 7
                    [y] => 8
                    [z] => 9
                )
            [7] => Array
                (
                    [x] => 10
                    [y] => 11
                    [z] => 12
                )
        )
)

5
$result = ['5' => 'cherry', '7' => 'apple'];
array_multisort($result, SORT_ASC);
print_r($result);

Mảng ([0] => apple [1] => cherry)

//...
array_multisort($result, SORT_DESC);
//...

Mảng ([0] => cherry [1] => apple)


-7

Hàm bản địa PHP tồn tại cho điều này. Xem http://php.net/manual/en/ Chức năng.reset.php

Đơn giản chỉ cần làm điều này: mixed reset ( array &$array )


4
Vui lòng đọc hướng dẫn sử dụng mà bạn đang liên kết đến; resetlàm điều gì đó khác.
dối trá

Nó chỉ di chuyển con trỏ đến phần tử đầu tiên của mảng. Cách tìm kiếm trên Topicstarter để thả các khóa ở trạng thái mặc định 0, 1, 2 ... N.
SlowSuperman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.