Câu trả lời:
Nó có thể được thực hiện với một lớp lót đơn giản.
Có mảng này:
$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');
Bạn có thể làm:
$arr = array_diff($arr, array('remove_me', 'remove_me_also'));
Và giá trị của $arr
sẽ là:
array('nice_item', 'another_liked_item')
Hy vọng nó sẽ giúp viết mã đẹp.
array_diff
chức năng là không phá hủy, nó sẽ trả về một mảng mới.
$referenced = array_diff($referenced, $items_to_remove);
Tôi đang thêm một câu trả lời thứ hai. Tôi đã viết một kịch bản điểm chuẩn nhanh để thử các phương pháp khác nhau ở đây.
$arr = array(0 => 123456);
for($i = 1; $i < 500000; $i++) {
$arr[$i] = rand(0,PHP_INT_MAX);
}
shuffle($arr);
$arr2 = $arr;
$arr3 = $arr;
/**
* Method 1 - array_search()
*/
$start = microtime(true);
while(($key = array_search(123456,$arr)) !== false) {
unset($arr[$key]);
}
echo count($arr). ' left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 2 - basic loop
*/
$start = microtime(true);
foreach($arr2 as $k => $v) {
if ($v == 123456) {
unset($arr2[$k]);
}
}
echo count($arr2). 'left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 3 - array_keys() with search parameter
*/
$start = microtime(true);
$keys = array_keys($arr3,123456);
foreach($keys as $k) {
unset($arr3[$k]);
}
echo count($arr3). 'left, in '.(microtime(true) - $start).' seconds<BR>';
Phương thức thứ ba, array_keys()
với tham số tìm kiếm tùy chọn được chỉ định, dường như là phương pháp tốt nhất. Ví dụ đầu ra:
499999 left, in 0.090957164764404 seconds
499999left, in 0.43156313896179 seconds
499999left, in 0.028877019882202 seconds
Đánh giá theo cách này, giải pháp tôi sẽ sử dụng sau đó sẽ là:
$keysToRemove = array_keys($items,$id);
foreach($keysToRemove as $k) {
unset($items[$k]);
}
Làm thế nào về:
if (($key = array_search($id, $items)) !== false) unset($items[$key]);
hoặc cho nhiều giá trị:
while(($key = array_search($id, $items)) !== false) {
unset($items[$key]);
}
Điều này cũng sẽ ngăn ngừa mất chìa khóa, đó là một tác dụng phụ của array_flip()
.
Giải pháp mạnh nhất sẽ được sử dụng array_filter
, cho phép bạn xác định chức năng lọc của riêng mình.
Nhưng một số người có thể nói rằng nó hơi quá mức, trong tình huống của bạn ...
Một foreach
vòng lặp đơn giản để đi qua máng và loại bỏ mục bạn không muốn là đủ.
Một cái gì đó như thế này, trong trường hợp của bạn, có lẽ nên thực hiện mẹo:
foreach ($items as $key => $value) {
if ($value == $id) {
unset($items[$key]);
// If you know you only have one line to remove, you can decomment the next line, to stop looping
//break;
}
}
Hãy thử mảng_search ()
array_keys()
dường như thực hiện tốt hơn array_search()
cho nhiệm vụ này.
Giải pháp của bạn chỉ hoạt động nếu bạn có các giá trị duy nhất trong mảng của mình
Xem:
<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
?>
Một cách tốt hơn sẽ không được đặt với Array_search , trong một vòng lặp nếu cần thiết.
function deleteValyeFromArray($array,$value)
{
foreach($array as $key=>$val)
{
if($val == $value)
{
unset($array[$key]);
}
}
return $array;
}
Bạn có thể sử dụng hàm Array_splice cho thao tác này Ref: Array_splice
array_splice($array, array_search(58, $array ), 1);