Операции с массивами PHP

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

У массивов есть мощная функция по наполнению массива array_push(), которая добавляет один или несколько элементов в конец массива.

$stack = array(); // или $stack = [] с PHP 5.4;
array_push($stack, "apple", "banana");
print_r($stack); // Array ([0] => apple [1] => banana) 

Так как array_push() является функцией, то каждый раз ее необходимо вызывать, для наполнения массива, что оказывается ресурсозатратно если ее использовать например в циклах.

Для краткости записи и для экономии ресурсов ей соответствует инструкция:

$stack[] = "apple";
$stack[] = "banana";
print_r($stack); // Array ([0] => apple [1] => banana) 

Преимущество инструкции $stack[] = «apple» заключается в том, что при ее объявлении осуществляется создание массива на лету, то есть в нашем примере мы не объявляли пустой массив $stack = [], он создается самостоятельно, в то время как функция array_push($stack, «apple», «banana») требует, что бы был объевлен массив $stack иначе мы получим предупреждение.

Переопределение ключей массива.

Известно, что в ассоциативном массиве как и в обычном не могут быть повторяющихся ключей, т.к это уникальное поле, так же как автоинкремент в таблице SQL. Оно служито для того, что бы можно было выполнить поиск значений, ведь массивы необходимы для хранения и извлечения данных.

В связи с этим сокращенной инструкцией $stack = [] необходимо пользоваться очень аккуратно, например если мы выполним:

$array['colour'] = 'blue';
$array['colour'][] = 'white';

print_r($array); // ошибка

возникнет ошибка, так как мы переопределяем строковое значение с одинаковым ключом colour, а так как значение blue является строкой, то мы не можем добавить в него значение white.

В данном случае правильной будет конструкция:

$array['colour'] = ['blue'];
$array['colour'][] = 'white';

print_r($array); // Array ( [colour] => Array ( [0] => blue [1] => white ) )

Переопределение значений массива

Еще одна интересная особенность массива — переопределение значений:

$array['coloring'] = 'blue';
$array['coloring'][0] = 'green';
print_r($array['coloring']); // glue

В данном примере мы присвоили ключу coloring массива строковое значение blue, и как известно строку можно разбить на символы, например нулевой элемент строки $str = ‘green’ можно записать $str[0], соответсвенно $array[‘coloring’][0] это равносильно $str[0] = ‘blue’, тоесть символ b, который мы переопределяем символом g из строки green.

Итак, мы подошли к практическому применению операции с масивами и переопределения ключей.

Дан двумерный массив

$arr = [
        ['id' => '148664', 'date' => '2020-09-08'],
        ['id' => '148659', 'date' => '2020-09-09'],
        ['id' => '148786', 'date' => '2020-09-10'],
        ['id' => '148866', 'date' => '2020-09-10']
    ];

нам необходимо его отсортировать по дате, что бы он приобрел следующий вид:

Array
(
    [2020-09-08] => Array
        (
            [0] => Array
                (
                    [house_id] => 148664
                    [date] => 2020-09-08
                )

        )

    [2020-09-09] => Array
        (
            [0] => Array
                (
                    [house_id] => 148659
                    [date] => 2020-09-09
                )

        )

    [2020-09-10] => Array
        (
            [0] => Array
                (
                    [house_id] => 148786
                    [date] => 2020-09-10
                )

            [1] => Array
                (
                    [house_id] => 148866
                    [date] => 2020-09-10
                )

        )

)

Для этого мы выполняем простую операцию:

$result = [];
    foreach($arr as $key => $val) {
        $result[$val['date']][] = array(
            'house_id' => $val['id'],
            'date' => $val['date']
        );
    }
echo "<pre>";
print_r($result);
echo "</pre>";
Категории PHP

Добавить комментарий