2013-06-17 2 views
7

У меня есть некоторые индексы, которые мне нужно удалить из основного массива. Например:Удалить общие индексы массива

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

Я хочу, чтобы конечный результат, как:

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

Я знаю, что мы имеем array_slice функцию в PHP, которая может быть запущена в цикле, но у меня есть очень большие данные, и я хочу, чтобы избежать петля здесь.

+1

могли бы попытаться манипулировать с [ 'array_diff'] (http://www.php.net/manual/en/function.array-diff.php) – naththedeveloper

+1

Mayb использовать Еогеасп ($ removeIndex как $ индекс) { снята с охраны ($ mainArray [$ index]) } – tejas

ответ

8

Возможно попробовать 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>'; 

Когда я попробовал это, он вернулся:

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

Это именно то, что я искал без« LOOPING », спасибо – Jacklish

+4

@EliasVanOotegem Существует ограничение по времени, быть терпеливым :-) – HamZa

+0

@EliasVanOotegem Да, дожидаясь окончания срока, даст вам кредит наверняка через 1 минуту. – Jacklish

1

попробуйте unset функция. Это должно работать идеально.

unset($mainArray[1]); 
+0

'unset' _would_ требуется цикл, который OP пытается избежать –

4

вы можете использовать array_diff_key, обратите внимание, что в removeIndex массиве вам нужно сделать значения, как 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); 

Как указано @Elias, вы можете использовать array_flip, чтобы изменить значения на клавиши в вашем массиве removeIndex.

+1

Вот почему вы можете использовать ['array_flip()'] (http://www.php.net/manual/en/function.array-flip.php) – HamZa

+1

да спасибо :) @HamZa – DevZer0