На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Решение задачи на собеседовании по вставке в массив PHP



Давайте разберем возможное решение одной задачи при собеседовании на PHP-разработчика (web-программиста). Текст задачи:

Вставить $a в индексный (простой) массив целых чисел после всех элементов, в которых есть цифра 2. Новый массив создавать нельзя. Использовать функцию array_splice нельзя.

Общий ход решения

На первый взгляд все выглядит довольно просто. По сути можно разбить (условно) на 5 этапов:

  1. Инициализация (тут мы вводим переменную $a и массив + заполняем его произвольными целыми числами)
  2. Прохождение по массиву (foreach, например, или for)
  3. Определение наличия двойки в строке (strrpos нам в помощь)
  4. Вставка значения в массив
  5. Вывод результата (print_r, например)
Пункты 1 и 5 необязательно, но lля наглядности введем их. Мы же хотим произвести хорошее впечатление на будущего работодателя, верно?

Итак, начинаем писать код.

Решение задачи

Инициализация

$a = 1;
$arr = array(22, 45, 22, 34, 234, 234, 657, 2, 22, 0, 2);
Пусть будет число 1 вставлять после тех, в которых содержаться двойки. А массив $arr начнём и закончим с таких чисел – чтобы заведомо обработать крайние случаи.

Прохождение по массиву

Цикл используем for, для этого предварительно найдем длину массива. Вообще, можно и сразу count($arr) в условии цикла поставить, но в таком случае наш интерпретатор PHP каждый раз будет вычислять размер, так что немного оптимизируем сразу программу.

$len = count($arr);
for ($i = 0; $i < $len; $i++){
Определение наличия двойки в строке

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

if (strrpos($arr[$i], "2") !== false) {
Обратите внимание, что равенство (точнее неравенство) строгое, так как здесь может быть нуль (первая позиция), он же в некоторых случаях проходит за false.

Вставка значения в массив

А вот тут самое интересное. Нам надо после текущего элемента ($arr[$i]) вставить $a. Если просто присвоить следующему ($arr[$i+1] = $a), то тогда куда девать бывшее значение $arr[$i+1]? Если бы можно было создать новый массив, то мы бы с самого начала его создали и благополучно в него помещали все значения, когда доходили до двоек – еще и $a.

Но так делать нельзя по условию задачи, поэтому придется задействовать еще один цикл – для сдвига всех элементов на единицу. Код:

$len++;
for ($j = $len - 1; $j > $i; $j--){
    $arr[$j] = $arr[$j-1];
}        
$i++;
$arr[$i] = $a;
Разберем его построчно. В первой строке мы прибавляем единицу к длине массива, что логично – мы же добавляем элемент. Во второй начинаем цикл обхода массива с конца до текущего элемента. В третьей переназначаем значения элементов массива со сдвигом в единицу. В пятой сразу переключаем счётчик i на единицу вперёд. Ну и в шестой строке вставляем $a в нужное место.

Очень удобно, кстати, что в PHP при инициализации массива не задаётся его размер. В других языках, например, C#, программа должна знать точный размер массива перед его использованием, так что в случае неизвестных значений приходится использовать коллекции.

Вывод результата

И самый последний, самый простой пункт:

print_r($arr);
В итоге код будет выглядеть так:

$a = 1;
$arr = array(22, 45, 22, 34, 234, 234, 657, 2, 22, 0, 2);

$len = count($arr);
for ($i = 0; $i < $len; $i++){
    if (strrpos($arr[$i], "2") !== false) {
        $len++;
        for ($j = $len - 1; $j > $i; $j--){
                $arr[$j] = $arr[$j-1];
        }        
        $i++;
        $arr[$i] = $a;
    }
}

print_r($arr);




Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегизаметки, php, задачи, собеседование

Читайте также:




Анонимные функции PHP
Заказ Стрибог на Java


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.