sonyps4.ru

Php удалить из массива значение. Удалить из массива четные элементы

Данную задачу можно решить несколькими способами.

Способ 1. Скопировать в другой массив только нечетные элементы.

const N = 20 ; var a, b: array [ 1 .. N ] of integer ; i, m: byte ; begin randomize; for i: = 1 to N do begin a[ i] : = random(40 ) + 10 ; write (a[ i] : 3 ) ; end ; writeln ; m : = 0 ; for i: = 1 to N do if a[ i] mod 2 <> 0 then begin m : = m + 1 ; b[ m] : = a[ i] ; end ; for i: = 1 to m do begin write (b[ i] : 3 ) ; end ; writeln ; end .

Это самый простой способ удаления элементов массива (в данном случае четных чисел), так как не требуется сжимать исходный массив. В представленном выше решении задачи переменная m хранит количество найденных нечетных элементов и в то же время, при заполнении второго массива является меняющимся индексом элементов.

Способ 2. Удалять четные элементы в текущем массиве, перезаписывая их расположенными правее нечетными.

const N = 10 ; var a: array [ 1 .. N ] of integer ; i, k, m: byte ; begin randomize; for i: = 1 to N do begin a[ i] : = random(40 ) + 10 ; write (a[ i] : 3 ) end ; writeln ; i : = 1 ; m : = N; while i<= m do if a[ i] mod 2 = 0 then begin m : = m- 1 ; for k: = i to m do a[ k] : = a[ k+ 1 ] ; end else i : = i+ 1 ; for i: = 1 to m do write (a[ i] : 3 ) ; writeln ; end .

Этот способ решения задачи сложнее. Здесь если встречается четный элемент, то весь остаток массива сдвигается на одну ячейку вперед. При этом найденный четный элемент затирается. Переменная m уменьшается, т. к. количество элементов массива становится меньше.

Этот способ следует считать наиболее рациональным (однако в школьном курсе открытые массивы могут не изучаться). В предыдущих вариантах по-сути массивы не уменьшались, на экран выводилась лишь часть массива. Можно было бы вообще просто перебрать исходный массив, ничего с ним не делать и вывести на экран только нечетные элементы.

Открытый массив позволяет изменять свою длину. В решении задачи ниже после того как нечетные элементы сдвинуты и "затерли" нечетные, изменяется длина массива (процедурой setlength). Она устанавливает новую длину массива. Особенностью открытых массивов в Pascal является то, что их индексация начинается с нуля.

const N = 10 ; var a: array of integer ; i, j, m: byte ; begin randomize; SetLength(a, N) ; for i : = 0 to N- 1 do begin a[ i] : = random(40 ) + 10 ; write (a[ i] : 3 ) ; end ; writeln ; i : = 0 ; // индекс первого элемента m : = n- 1 ; // индекс последнего while i <= m do if a[ i] mod 2 = 0 then begin for j : = i to m- 1 do a[ j] : = a[ j+ 1 ] ; m : = m - 1 end else i : = i + 1 ; SetLength(a, m+ 1 ) ; // последний элемент имеет индекс m, но элементов m+1 for i: = 0 to m do write (a[ i] : 3 ) ; writeln ; end .

Пример выполнения кода программы.

Массив – одна из самых полезных и часто используемых структур данных в любом языке программирования. Уметь управлять массивами и их элементами очень важно и полезно. В данной статье рассмотрим, как можно удалить отдельные элементы массива в PHP.

Данная задача может быть реализована разными методами, в зависимости от того, что мы знаем об удаляемом элементе – известен ли ключ (номер или идентификатор элемента в массиве) или только его значение.

Удаление элемента в массиве по его ключу

Если известен ключ элемента, то задача очень проста. Функция unset() позволяет удалить элемент массива или любую переменную (так же будет очищена задействованная под переменную память компьютера).

Например, имеем массив:

$myArr = array (1,2,3,4,5);

Для удаления элемента со значением "3" используем код:

unset($myArr);

Обратите внимание, что указывается не значение (3), а ключ элемента (2), начинающийся, в данном случае с 0. Так, если нужно удалить первый элемент массива, то указываем нулевой элемент:

unset($myArr);

Так же стоит учитывать, что после наших двух удалений, массив теперь содержит три элемента:

Array
=> 2
=> 4
=> 5
)

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

Удаление элемента массива по его значению

Если ключ элемента не известен, а известно только значение массива, то придется перебрать все элементы массива циклом и удалить искомый. Например, удаляем элемент со значением "3":

$myArr = array (1,2,3,4,5);
foreach ($myArr as $key => $item){
if ($item == 3){
unset($myArr[$key]);
}
}

* Обратите внимание, что проверяется в условии значение массива, доступное в цикле в переменной $item, а при удалении, указывается ключ элемента (переменная $key).

Такое алгоритм подходит еще и в случае, если нужно удалить сразу группу элементов. Ведь здесь имеется условие, определяющее какие элементы удалять.

Удаление пересекающихся элементов массива

Одним из удобных средств PHP является возможность получить массив из элементов, не пересекающихся с элементами других массивов. Для этого применяется функция array_diff (). В качестве параметров, она принимает массивы, возвращая новый массив. Например, имеется исходный массив $myArr из которого нам нужны только элементы не входящие в массив $myArr2:

$myArr = array (1,2,3,4,5);
$myArr2 = array (3,4);

Применив функцию array_diff() , получим новый массив, содержащий только необходимые элементы:

$resArr = array_diff($myArr, myArr2);

В результате $resArr будет содержать:

Array
=> 1
=> 2
=> 5
)

* Здесь стоит обратить внимание на то, что ключи при создании нового массива сохраняются. Кроме того, стоит знать, что выборка идет только из первого массива. Так, если в $myArr2 другие уникальные элементы, например "6" или "7", то на результат это никак не повлияет - они в новый массив добавлены не будут.

Фукции для работы с массивами и операции над массивами (Часть 2)

Слияние массивов

Слияние (конкатенация) массивов - это операция создания массива, состоящего из элементов нескольких других массивов. Слияние массивов - это очень опасная операция, поскольку результат слияния подчиняется своей логике, забыв о которой можно потерять данные. Слияние массивов реализуется при помощи оператора "+ " или с помощью функции Слияние может осуществляться только с помощью функции array_merge() .

Предположим, мы имеем два массива:

$A = array("1"=>"Первый", "2"=>"Второй");
$B = array("3"=>"Третий", "4"=>"Четвертый");

Теперь сольем данные два массива в один массив $C :

Оператор "+ " для массивов не коммутативен. Это означает, что $A + $B не равно $B + $A .

В результате рассмотренного примера мы получим массив $C следующего вида:

"1"=>"Первый", "2"=>"Второй", "3"=>"Третий", "4"=>"Четвертый"

А в результате $B + $A мы получим такой массив:

"3"=>"Третий", "4"=>"Четвертый", "1"=>"Первый", "2"=>"Второй"

При слиянии списков такой метод не работает. Поясним данный факт на примере:

Предположим, у нас есть два массива:

$A = array(10,11,12);
$B = array(13,14,15);

В результате слияния списков $A и $B ($A + $B ) мы получим: 10,11,12. А это совсем не тот результат, который мы хотели получить... Связано это с тем, что при слиянии списков с одинаковыми индексами в результирующем массиве остается элемент первого массива, причем на том же месте. В таком случае нам необходимо использовать функцию

Пример использования функции count() :

$ arr = 5 ;
$ arr = 4 ;
$ arr = 8 ;
$ arr = 3 ;
$ arr = 8 ;
echo "

Число элементов массива: " . count ($ arr ). "

" ;
// Выводит: Число элементов массива: 5
?>

Удаление массива и его элементов

Если вы хотите удалить массив целиком, воспользуйтесь функцией unset() .

Если вы хотите удалить пару ключ/значение, вы также можете использовать функцию unset() . Приведем конкретные примеры:

$arr = array(5 => 1 , 12 => 2 );

$arr = 56 ; // В этом месте скрипта это
// эквивалентно $arr = 56;

$arr [ "x" ] = 42 ; // Это добавляет к массиву новый
// элемент с ключом "x"
форум портала PHP . SU



Загрузка...