2015-06-14 2 views
2

Предположим, у меня есть массив вроде следующего.PHP - удалить ненужные элементы из массива

[0] => Array 
    [0] => Peter drives 45km to work 
    [1] => Tom rides 32km with his friends 
    [2] => Lisa walks 6km to the gym 
    [3] => Bob cycles 12km to keep fit 
    [4] => Bill takes the train 63km to work 
    [5] => Penny runs 8km to the shop 
    [6] => Robert takes a taxi 21km to the museum 

Предположим, я хочу оставить только людей, которые путешествовали между 10-15 км и удалить всех остальных из массива. Кроме того, предположим, что диапазон, который я хочу использовать, является переменным, то есть: сегодня мне может понравиться, кто путешествовал между 10-15 км, но завтра мне может понравиться, кто путешествовал между 5-15 км, затем на следующий день мне бы хотелось увидеть который путешествовал между 30-50 км.

Как бы я мог искать этот массив и удалять все элементы, которые не попадают в указанный диапазон, или перемещать элементы, необходимые для нового массива?

Что касается элементов, которые мне нужны, мне нужно сохранить все значение, а не только пройденное расстояние.

+0

Возможный дубликат [Удалить элемент из массива] (http://stackoverflow.com/questions/369602/delete-an-element-from-an- массив) – Risadinha

+0

Вы должны взглянуть на документацию php. Он предлагает список доступных функций массива. Среди них функции фильтрации. И там вы должны проверить варианты, которые позволяют указать функцию обратного вызова для фактического решения фильтра. В этом обратном вызове вы определяете, что вам нужно использовать регулярное выражение для извлечения номера из строки, а затем принять решение. – arkascha

+0

@ Risadinha Это, конечно, не дубликат этого вопроса. Пожалуйста, прочитайте вопросы до конца ... – arkascha

ответ

2

Вы можете использовать фильтр массива функции PHP в сочетании с обратным вызовом, которая использует регулярное выражение для извлечения соответствующего числа из строк:

<?php 

$min = 10; 
$max = 20; 
$input = [ 
    "Peter drives 45km to work", 
    "om rides 32km with his friends", 
    "Lisa walks 6km to the gym", 
    "Bob cycles 12km to keep fit", 
    "Bill takes the train 63km to work", 
    "Penny runs 8km to the shop", 
    "Robert takes a taxi 21km to the museum", 
]; 

$output = array_filter($input, function($string) use ($min, $max) { 
    preg_match('/([0-9]+)km/', $string, $matches); 
    $number = intval($matches[1]); 
    return ($number>$min) && ($number<$max); 
}); 

print_r($output); 

Выхода этого примера (с заданными значениями для $min и $max) является:

Array 
(
    [3] => Bob cycles 12km to keep fit 
) 

Различные подходы возможны, здесь я использовал «закрытие», чтобы держать вещи компактно. Очевидно, что значения в $min и $max - это те, которые вы хотите определить динамически. Некоторая обработка ошибок должна быть добавлена ​​внутри функции обратного вызова, если входные строки имеют неожиданный формат. Я оставил это здесь, чтобы снова сохранить вещи ...

+0

Он работал мгновенно, большое вам спасибо! – WiLDRAGoN

0

Если вы удалите любой элемент из своего массива.

unset($a[2]); 

$ a - переменная, которая содержит массив.

Смежные вопросы