Hướng dẫn php flatten array with keys - php phẳng mảng với các phím

29

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Có thể trùng lặp: PHP chuyển đổi mảng lồng nhau thành một mảng đơn trong khi nối các khóa? Nhận khóa của Array một cách đệ quy và tạo chuỗi SEPEREDCORE
PHP convert nested array to single array while concatenating keys?
Get array's key recursively and create underscore seperated string

Xin vui lòng, đọc toàn bộ câu hỏi trước khi trả lời.

Tôi có mảng đa chiều này:

$data = array(
    'user' => array(
        'email'   => '',
        'name'    => 'Super User',
        'address' => array(
            'billing' => 'Street 1',
            'delivery' => 'Street 2'
        )
    ),
    'post' => 'Hello, World!'
);

Tôi muốn nó làm phẳng, biến thành:

$data = array(
    'user.email' => '',
    'user.name'  => 'Super User',
    'user.address.billing'  => 'Street 1',
    'user.address.delivery' => 'Street 2',
    'post'       => 'Hello, World!'
);

Important::

  • Các chìa khóa rất quan trọng đối với tôi. Tôi muốn chúng được nối, cách nhau bởi các giai đoạn.very important to me. I want them concatenated, separated by periods.

  • Nó nên hoạt động với bất kỳ mức độ làm tổ.

Cảm ơn bạn!

Hướng dẫn php flatten array with keys - php phẳng mảng với các phím

Đã hỏi ngày 3 tháng 3 năm 2012 lúc 12:33Mar 3, 2012 at 12:33

2

Một cái gì đó như thế này nên hoạt động:

function flatten($array, $prefix = '') {
    $result = array();
    foreach($array as $key=>$value) {
        if(is_array($value)) {
            $result = $result + flatten($value, $prefix . $key . '.');
        }
        else {
            $result[$prefix . $key] = $value;
        }
    }
    return $result;
}

THỬ NGHIỆM

Đã trả lời ngày 3 tháng 3 năm 2012 lúc 12:39Mar 3, 2012 at 12:39

Hướng dẫn php flatten array with keys - php phẳng mảng với các phím

Felix Klingfelix KlingFelix Kling

772K172 Huy hiệu vàng1069 Huy hiệu bạc1116 Huy hiệu đồng172 gold badges1069 silver badges1116 bronze badges

2

Cảm ơn tất cả các câu trả lời đã cho.

Tôi đã chuyển đổi nó theo phần sau, đó là một phiên bản cải tiến. Nó loại bỏ sự cần thiết của một tiền tố gốc, không cần sử dụng tài liệu tham khảo, nó sạch hơn để đọc và nó có một cái tên tốt hơn:

function array_flat($array, $prefix = '')
{
    $result = array();

    foreach ($array as $key => $value)
    {
        $new_key = $prefix . (empty($prefix) ? '' : '.') . $key;

        if (is_array($value))
        {
            $result = array_merge($result, array_flat($value, $new_key));
        }
        else
        {
            $result[$new_key] = $value;
        }
    }

    return $result;
}

Đã trả lời ngày 3 tháng 3 năm 2012 lúc 12:55Mar 3, 2012 at 12:55

J. Brunij. BruniJ. Bruni

20K12 Huy hiệu vàng73 Huy hiệu bạc92 Huy hiệu Đồng12 gold badges73 silver badges92 bronze badges

0

Thử cái này

<?php

$data = array(
    'user' => array(
        'email'   => '',
        'name'    => 'Super User',
        'address' => array(
            'billing' => 'Street 1',
            'delivery' => 'Street 2'
        )
    ),
    'post' => 'Hello, World!'
);

function prefixKey($prefix, $array)
{
    $result = array();
    foreach ($array as $key => $value)
    {
        if (is_array($value))
            $result = array_merge($result, prefixKey($prefix . $key . '.', $value));
        else
            $result[$prefix . $key] = $value;
    }   
    return $result;
}

var_dump(prefixKey('', $data));

?>

Đầu ra

array
  'user.email' => string '' (length=16)
  'user.name' => string 'Super User' (length=10)
  'user.address.billing' => string 'Street 1' (length=8)
  'user.address.delivery' => string 'Street 2' (length=8)
  'post' => string 'Hello, World!' (length=13)

Đã trả lời ngày 3 tháng 3 năm 2012 lúc 12:43Mar 3, 2012 at 12:43

BastibastiBasti

3.98816 Huy hiệu bạc20 Huy hiệu đồng16 silver badges20 bronze badges

6

Kiểm tra điều này ở đây

Tôi đã vượt qua bằng cách tham khảo để không cần trả lại. Chỉ cần bàn giao lưu trữ mảng.

$store = array();

function flatten($array,&$storage,$parentKey = ''){
    foreach($array as $key => $value){
    $itemKey = (($parentKey)? $parentKey.'.':'').$key;
        if(is_array($value)){
            flatten($value,$storage,$itemKey);
        } else {
            $storage[$itemKey] = $value;
        }
    }   
}

flatten($data,$store);
var_dump($store);

Đã trả lời ngày 3 tháng 3 năm 2012 lúc 12:54Mar 3, 2012 at 12:54

JosephjosephJoseph

Huy hiệu vàng 115K2828 gold badges178 silver badges226 bronze badges

0

Sử dụng đệ quy như thế này:

function process_data( $data, $parent_key ){

    if ( ! is_array( $data ) ){
        return $data;
    }

    $flattened_array = array();
    foreach( $data as $key => $item ){
        $flattened_key = $parent_key . '.' . $key;
        $flattened_array[ $flattened_key ] = process_data( $item, $flattened_key );
    }

    return $flattened_array;

}

Đã trả lời ngày 3 tháng 3 năm 2012 lúc 12:44Mar 3, 2012 at 12:44

Scibuffscibuffscibuff

12.9k2 Huy hiệu vàng25 Huy hiệu bạc28 Huy hiệu đồng2 gold badges25 silver badges28 bronze badges

2

Làm thế nào để làm phẳng mảng trong PHP?

Làm phẳng một mảng hai chiều_merge (... $ TwodimensionArray); Array_merge lấy một danh sách các mảng biến làm đối số và hợp nhất tất cả chúng thành một mảng. Bằng cách sử dụng toán tử splat (...), mọi phần tử của mảng hai chiều đều được truyền dưới dạng đối số cho Array_merge.array_merge(... $twoDimensionalArray); array_merge takes a variable list of arrays as arguments and merges them all into one array. By using the splat operator ( ... ), every element of the two-dimensional array gets passed as an argument to array_merge .

Làm thế nào để bạn làm phẳng một mảng?

Các phương pháp khác nhau để làm phẳng một mảng..
một.Sử dụng Concat () và Ứng dụng () Let FlatArray = [].liên kết.....
b.Sử dụng toán tử lây lan.Đặt FlatArray = [].Concat (... mảng);// Đầu ra: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] ....
c.Sử dụng phương pháp giảm.Đặt FlatArray = mảng.Giảm ((acc, curval) => {return acc ..

Phương pháp nào được sử dụng để thu gọn mảng đa chiều vào một mảng một chiều?

Nếu bạn có một mảng các mảng - ví dụ, một mảng của một mảng số nguyên - bạn có thể chuyển đổi nó thành một mảng phẳng duy nhất bằng cách sử dụng phương thức đã tham gia ().joined() method.

Làm phẳng ở Laravel là gì?

Flatten là hàm thành viên của một đối tượng (trong trường hợp này, đối tượng thu thập Laravel) và một mảng không phải là một đối tượng.Bạn cần chuyển đổi mảng thành một bộ sưu tập trước, sau đó bạn có thể làm phẳng nó: $ dẹt = Thu thập ($ kết quả)-> Flatten ();Thực hiện theo câu trả lời này để nhận thông báo.Chỉnh sửa ngày 30 tháng 3 năm 2021 lúc 9:15.a member function of an object (in this case, the Laravel Collection object) and an array is not an object. You need to convert the array to a collection first, then you can flatten it: $flattened = collect($results)->flatten(); Follow this answer to receive notifications. edited Mar 30, 2021 at 9:15.