2013-06-17 4 views
7

Tôi có một số chỉ mục mà tôi cần xóa khỏi mảng chính. Ví dụ:Xóa các chỉ mục chung của mảng

$removeIndex=array(1,3,6); 
$mainArray=array('1'=>'a','2'=>'b','3'=>'c','4'=>'d','5'=>'e','6'=>'f'); 

Tôi muốn kết quả cuối cùng như:

$mainArray=array('2'=>'b','4'=>'d','5'=>'e'); 

tôi biết chúng tôi có array_slice hàm trong PHP, có thể được chạy trong vòng lặp, nhưng tôi có dữ liệu rất lớn và tôi muốn tránh lặp lại ở đây.

+1

Có thể thử thao tác với ['array_diff'] (http://www.php.net/manual/en/function.array-diff.php) – naththedeveloper

+1

mayb sử dụng foreach ($ removeIndex là $ index) { chưa đặt ($ mainArray [$ index]) } – tejas

Trả lời

8

Có lẽ thử array_diff_key:

$removeIndex=array(1,3,6); 
$mainArray=array('1'=>'a','2'=>'b','3'=>'c','4'=>'d','5'=>'e','6'=>'f'); 
$removeIndex = array_flip($removeIndex);//flip turns values into keys 
echo '<pre>'; 
//compute diff between arr1 and arr2, based on key 
//returns all elements of arr 1 that are not present in arr2 
print_r(array_diff_key($mainArray, $removeIndex)); 
echo '</pre>'; 

Khi tôi cố gắng này, nó trả về:

Array 
(
    [2] => b 
    [4] => d 
    [5] => e 
)
+0

Đây chính xác là những gì tôi đang tìm kiếm mà không cần" LOOPING ", Cảm ơn – Jacklish

+4

@EliasVanOotegem Có giới hạn thời gian, kiên nhẫn :-) – HamZa

+0

@EliasVanOotegem Có, chờ đợi để hoàn thành giới hạn thời gian, sẽ cung cấp cho bạn tín dụng chắc chắn trong 1 phút. – Jacklish

1

thử chức năng unset. Điều này phải làm việc hoàn hảo.

unset($mainArray[1]); 
+0

'unset' _would_ yêu cầu một vòng lặp, mà OP đang cố gắng tránh –

4

bạn có thể sử dụng array_diff_key, lưu ý rằng trong removeIndex mảng bạn cần phải thực hiện các giá trị như keys

$removeIndex=array('1' => 0,'3' => 0,'6' => 0); 
$mainArray=array('1'=>'a','2'=>'b','3'=>'c','4'=>'d','5'=>'e','6'=>'f'); 

$t = array_diff_key($mainArray, $removeIndex); 

print_r($t); 

Vì @Elias đã chỉ ra rằng bạn có thể sử dụng array_flip để thay đổi giá trị thành các khóa trong mảng removeIndex của bạn.

+1

Đó là lý do tại sao bạn có thể sử dụng ['array_flip()'] (http://www.php.net/manual/en/function.array-flip.php) – HamZa

+1

yes thanks :) @HamZa – DevZer0