Hướng dẫn php array except - mảng php ngoại trừ

Đơn giản, tôi chỉ tự hỏi nếu có một cách sạch sẽ và hùng hồn để trả lại tất cả các giá trị từ một mảng kết hợp không khớp với (các) khóa nhất định?

$array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');

$alphaAndGamma = arrayExclude($array, array('alpha'));
$onlyBeta      = arrayExclude($array, array('alpha', 'gamma'));

function arrayExclude($array, Array $excludeKeys){
    foreach($array as $key => $value){
        if(!in_array($key, $excludeKeys)){
            $return[$key] = $value;
        }
    }
    return $return;
}

Đây là những gì tôi (sẽ trở thành) bằng cách sử dụng, tuy nhiên, có việc triển khai sạch hơn, điều mà tôi đã bỏ lỡ trong hướng dẫn có lẽ?

hỏi ngày 28 tháng 2 năm 2011 lúc 21:18Feb 28, 2011 at 21:18

Hướng dẫn php array except - mảng php ngoại trừ

Dan Luggdan LuggDan Lugg

Huy hiệu vàng 19.8K1919 gold badges107 silver badges172 bronze badges

2

Mặc dù, câu hỏi này quá cũ và có một số câu trả lời cho câu hỏi này, nhưng tôi đang đăng một giải pháp có thể hữu ích cho ai đó.

Bạn có thể nhận tất cả các phần tử mảng từ đầu vào được cung cấp ngoại trừ các khóa nhất định mà bạn đã xác định để loại trừ bằng cách sử dụng:

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));

Điều này sẽ loại trừ các phần tử khỏi mảng

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
1 có các khóa
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
2,
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
3 và
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
4 và trả lại tất cả các khóa khác vào biến
$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
5.

Đã trả lời ngày 12 tháng 10 năm 2016 lúc 11:09Oct 12, 2016 at 11:09

1

Bạn chỉ có thể

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
6 giá trị:

$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);

Chỉnh sửa: Làm cho nó rõ ràng hơn. Bạn có thể sao chép một mảng bằng cách gán nó cho một biến khác.

hoặc trong một chức năng:

function arrayExclude($array, Array $excludeKeys){
    foreach($excludeKeys as $key){
        unset($array[$key]);
    }
    return $array;
}

Đã trả lời ngày 28 tháng 2 năm 2011 lúc 21:20Feb 28, 2011 at 21:20

Hướng dẫn php array except - mảng php ngoại trừ

Felix Klingfelix KlingFelix Kling

774K172 Huy hiệu vàng1070 Huy hiệu bạc1118 Huy hiệu đồng172 gold badges1070 silver badges1118 bronze badges

12

Sử dụng

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
7:

$array = array('alpha' => 'apple', 'beta' => 'banana', 'gamma' => 'guava');

$alphaAndGamma = array_diff_key($array, array('alpha'=>0));
$onlyBeta      = array_diff_key($array, array('alpha'=>0, 'gamma'=>0));

Chỉnh sửa: Tôi đã thêm => 0S.

Đã trả lời ngày 28 tháng 2 năm 2011 lúc 21:25Feb 28, 2011 at 21:25

linePogllinePogllinepogl

9.0694 Huy hiệu vàng31 Huy hiệu bạc44 Huy hiệu đồng4 gold badges31 silver badges44 bronze badges

5

Nếu bạn muốn Laravel Way, ARR :: ngoại trừ phương thức sẽ xóa các cặp khóa / giá trị đã cho khỏi một mảng:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$filtered = Arr::except($array, ['price']);

// ['name' => 'Desk']

@Source https://laravel.com/docs/8.x/helpers#method-array-except

Đã trả lời ngày 24 tháng 11 năm 2021 lúc 13:42Nov 24, 2021 at 13:42

Moode Osmanmoode OsmanMoode Osman

1.42316 huy hiệu bạc14 Huy hiệu đồng16 silver badges14 bronze badges

Chức năng đơn giản ở đây, sử dụng hai mảng, mảng thực tế và một mảng các phím cần được loại trừ. Cũng có thể dễ dàng được thực hiện thành một lớp lót nếu chúng ta loại trừ chức năng.

function array_except(array $array,array $except) {

 return array_filter($array,fn($key) => !in_array($key,$except),ARRAY_FILTER_USE_KEY);

}

Đã trả lời ngày 20 tháng 4 năm 2021 lúc 8:14Apr 20, 2021 at 8:14

AnoxyanoxyAnoxy

8337 Huy hiệu bạc17 Huy hiệu đồng7 silver badges17 bronze badges

$alphaAndGamma = $array;
unset($alphaAndGamma['alpha']);

$onlyBeta = $array;
unset($onlyBeta['alpha'], $onlyBeta['gamma']);

Đã trả lời ngày 28 tháng 2 năm 2011 lúc 21:22Feb 28, 2011 at 21:22

steveo225steveo225steveo225

11K16 Huy hiệu vàng60 Huy hiệu bạc112 Huy hiệu đồng16 gold badges60 silver badges112 bronze badges

Đã có một vài cuộc thảo luận về tốc độ khi sử dụng in_array. Từ những gì tôi đã đọc, bao gồm cả bình luận này1, sử dụng isset nhanh hơn in_array.

Trong trường hợp đó, mã của bạn sẽ là:

function arrayExclude($array, array $excludeKeys){

    $return = [];

    foreach($array as $key => $value){
        if(!isset($excludeKeys[$key])){
            $return[$key] = $value;
        }
    }
    return $return;
}

Điều đó sẽ nhanh hơn một chút và có thể giúp trong trường hợp bạn cần xử lý các bộ dữ liệu lớn.

Bradshaw giàu có

70.4K44 Huy hiệu vàng177 Huy hiệu bạc241 Huy hiệu Đồng44 gold badges177 silver badges241 bronze badges

Đã trả lời ngày 28 tháng 2 năm 2011 lúc 21:26Feb 28, 2011 at 21:26

dmcnelisdmcnelisdmcnelis

2.9031 Huy hiệu vàng18 Huy hiệu bạc28 Huy hiệu đồng1 gold badge18 silver badges28 bronze badges

Bạn có thể dễ dàng xóa một mục mảng bằng khóa của nó bằng cách sử dụng điều này ..

unset($array['key']); 

Demo http://codepad.org/ea9vtwzr http://codepad.org/EA9vTwzR

Đã trả lời ngày 28 tháng 2 năm 2011 lúc 21:22Feb 28, 2011 at 21:22

Dutchie432Dutchie432Dutchie432

11K16 Huy hiệu vàng60 Huy hiệu bạc112 Huy hiệu đồng20 gold badges91 silver badges109 bronze badges

Đã có một vài cuộc thảo luận về tốc độ khi sử dụng in_array. Từ những gì tôi đã đọc, bao gồm cả bình luận này1, sử dụng isset nhanh hơn in_array.

$result = array_diff_key($input, array_flip(["SomeKey1", "SomeKey2", "SomeKey3"]));
0

Trong trường hợp đó, mã của bạn sẽ là:Feb 28, 2011 at 21:28

Hướng dẫn php array except - mảng php ngoại trừ

Điều đó sẽ nhanh hơn một chút và có thể giúp trong trường hợp bạn cần xử lý các bộ dữ liệu lớn.frabala

Bradshaw giàu có4 silver badges13 bronze badges

1