2012-03-12 2 views
2

У меня есть массив как это:Как удалить элементы в массиве?

array() { 
    ["AG12345"]=> 
    array() { 

    } 
    ["AG12548"]=> 
    array() { 

    } 
    ["VP123"]=> 
    array() { 

    } 

Мне нужно держать только массивы с ключами, которые начинаются с «VP»

Это можно сделать с одной функцией?

+1

Можно создать дубликат http://stackoverflow.com/questions/2304570/how-to-delete-object-from-array-inside-foreach-loop – Chris

ответ

3

Да, просто использовать unset():

foreach ($array as $key=>$value) 
{ 
    if(substr($key,0,2)!=="VP") 
    { 
    unset($array[$key]); 
    } 
} 
+2

+1, но я хотел бы использовать 'SUBSTR() 'вместо regexp. Это проще и быстрее. – Minras

+0

@Minras - Хорошая точка. Сделано редактирование. –

+0

Почему «!» там на линии 3? – crunkchitis

0

Это работает для меня:

$prefix = 'VP'; 
for ($i=0; $i <= count($arr); $i++) { 
    if (strpos($arr[$i], $prefix) !== 0) 
     unset($arr[$i]); 
} 
+0

Спасибо, но я думаю, что substr более «прост» читать – bahamut100

+0

Это справедливо, что вы OP в конце концов :), но для меня функция substr также потребуется другой вызов функции i.e. strlen, чтобы получить длину префикса. – anubhava

0

Другой вариант (это будет путь проще если бы это были значения):

array_intersect_key($arr, array_flip(preg_grep('~^VP~', array_keys($arr)))); 
-1

Это всего лишь образец, как это сделать, у вас есть много других способов!

// sample array 
$alpha = array("AG12345"=>"AG12345", "VP12548"=>"VP12548"); 
foreach($alpha as $val) 
{ 
    $arr2 = str_split($val, 2); 
    if ($arr2[0] == "VP") 
     $new_array = array($arr2[0]=>"your_values"); 
} 
Смежные вопросы