Verification: a143cc29221c9be0

Php break во вложенном цикле

Php break во вложенном цикле

Назначение и виды циклов

Циклы – это простой способ для многократного выполнения одних и тех же действий (кода).

При этом однократное выполнения кода в цикле называется итерацией.

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

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

  • for;
  • while;
  • do...while;
  • for...in;
  • for...of (появился в версии ES6).

Цикл for

Данный цикл в основном используется когда известно точное количество повторений. Этот цикл ещё называют циклом со счётчиком.

Синтаксис цикла «for»:

for (инициализация; условие; финальное выражение) {
  /* тело цикла */
}

Алгоритм работы цикла for в JavaScript

Основные части конструкции цикла «for»:

  • инициализация - это выражение, которое выполняется один раз перед выполнением цикла; обычно используется для инициализации счётчика;
  • условие - это выражение, истинность которого проверяется перед каждой итерацией; если выражение вычисляется как истина, то выполняется итерация; в противном случае цикл «for» завершает работу;
  • финальное выражение - это выражение, которое выполняется в конце каждой итерации; обычно используется для изменения счетчика;
  • тело цикла - инструкции, выполнение которых нужно повторять.

Рассмотрим пример цикла, который выведет в консоль числа от 1 до 8:

// цикл «for» от 1 до 8, с шагом 1
for (var i = 1; i 

В этом примере:

  • инициализация: var i = 1 (объявление переменной i и присвоение ей значения 1);
  • условие выполнения цикла: i (пока значение переменной i меньше или равно 8);
  • финальное выражение, которое нужно выполнять в конце каждой итерации: i++ (увеличение значение переменной i на 1);
  • инструкция, которую нужно выполнять: console.log(i) (выведение значения счётчика в консоль).

При этом если тело цикла состоит из одной инструкции, то её можно не заключать в фигурные скобки.

Таким образом, пример, приведённый выше, можно записать ещё так:

// цикл «for» от 1 до 8, с шагом 1
for (var i = 1; i 

Необязательные части цикла цикла «for».

В «for» все части цикла являются не обязательными.

Например, можно пропустить выражение инициализации:

var i = 1;
// цикл «for»
for (; i 

В этом случае инициализацию переменной можно вынести за пределы цикла.

Условие в «for» тоже является не обязательным. Без условия цикл будет выполняться бесконечное количество раз. В этом случае чтобы его прервать (выйти из цикла) необходимо использовать инструкцию break.

// цикл «for»
for (var i = 1; ; i++) {
  if (i >= 8) { // условие прерывания цикла
    break;
  }
  console.log(i);
}

Финальное выражение в «for» также является не обязательным. Счётчик цикла в этом случае можно, например, изменять в теле.

// цикл «for»
for (var i = 1; i 

В «for» можно вообще опустить 3 выражения (бесконечный цикл):

var i = 1;
// цикл «for»
for (;;) {
  if (i >= 8) {
    break;
  }
  console.log(i);
  i++;
}

Кроме этого, в качестве тела цикла «for» можно использовать пустое выражение (;). Это используется, когда вам не нужно выполнять ни одной инструкции.

Например:

var
  arrA = [8, 12, 24],
  arrB = [];
for (i = 0; i 

Пустое выражение в этом случае рекомендуется дополнительно снабжать комментарием:

// сумма чисел в массиве
var arr = [2, 7, 3];
for (var i = 0, length = arr.length, sum = 0; i 

Пример использования цикла «for» для перебора элементов массива:

var arr = ["a", "b", "c"]; // массив
for (var i = 0, length = arr.length; i 

Пример, в котором выведем таблицу умножения в консоль. Для реализации этого примера будем использовать вложенные циклы.

var output = '';
for (var i = 1; i 

Цикл называется вложенным, если он находится в теле другого цикла.

Цикл while

Данный цикл предназначен для многократного выполнения одних и тех же инструкций до тех пор, пока истинно некоторое условие. Цикл «while» в основном используется, когда количество повторений заранее не известно.

while (условие) {
  /* тело цикла */
}

Алгоритм работы цикла while в JavaScript

Истинность условия проверяется перед каждым выполнением. Если перед первой итерацией условие ложно, то цикл не выполнится ни разу.

Пример, в котором выведем в консоль чётные числа в диапазоне от 1 до 8:

// объявим переменную а и присвоим ей значение 0
let a = 0;
//цикл while с условием a 


Цикл do...while

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

Алгоритм работы цикла do...while в JavaScript

do {
  /* тело цикла */
} while (условие)

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

// num – переменная для хранения числа, введённого пользователем
// sum – переменная для хранения суммы чисел
let num, sum = 0;
// цикл «do...while»
do {
  // запросим у пользователя данные и приведём их к числу
  num = +prompt ('Введите число', '');
  // если то, что ввёл пользователь после приведения является числом, то...
  if (num) {
    // прибавим к сумме число, введённое пользователем
    sum += num;
  }
// если num приводится к истине, то выполняем ещё итерацию
} while (num);

console.log(sum);

Цикл for...in

Цикл «for...in» предназначен для перебора перечисляемых имён свойств объекта. В JavaScript свойство является перечисляемым, если его внутренний флаг [[Enumerable]] равен true.

Свойства объекта, которые не относятся к перечисляемым, в цикле не участвуют.

Например, объект (массив) созданный с использованием функции-конструктора Array или его литеральной записи имеет не перечисляемые свойства от Array.prototype и Object.prototype, такие как indexOf(), some(), toString() и др. Они не будут участвовать в цикле.

/* цикл для перебора всех перечисляемых свойств объекта
    - key – переменная, в которую будет помещаться имя свойства объекта
    - object – объект, свойства которого нужно перебрать */
for (key in object) {
  /* тело цикла */
}

Переберём свойства объекта, созданного с помощью литеральной записи:

let car = {
  manufacturer: 'Ford',
  model: 'Fiesta',
  color: 'black'
};
for (let propName in car) {
  // propName – имя свойства
  // car[propName] – значение свойства
  console.log(propName + ' = ' + car[propName]);
}
// в консоль будет выведено: manufacturer = Ford, model = Fiesta, color = black

Кроме этого, следует отметить, что цикл for...in проходит не только по перечисляемых свойствам этого объекта, но и по наследуемым.

let item = {
  a: 1,
  b: 2
}
let newItem = Object.create(item);
newItem.c = 3;
newItem.d = 4;
for (let propName in newItem) {
  console.log(propName);
}
// в консоли будет выведено: c, d, a, b

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

for (let propName in newItem) {
  // переходим к следующей итерации, если текущее свойство не принадлежит этому объекту
  if(!newItem.hasOwnProperty(propName)) {
    continue;
  }
  console.log(propName);
}
// в консоли будет выведено: c, d

Использование цикла for... in для перебора массива. В массиве свойствами являются числовые индексы.

// массив
var arr = ["Rock", "Jazz", "Classical", "Hip Hop"];
// перебор массива с помощью цикла for in
for (let index in arr) {
  // index - индекс элемента массива
  // arr[index] – значение элемента
  console.log(arr[index]);
}
// в результате в консоль будет выведено: "Rock", "Jazz", "Classical", "Hip Hop"

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

При использовании цикла for…in стоит обратить внимание на то, что если вы к массиву добавили свои пользовательские свойства, то он по ним тоже пройдётся:

var arr = [5, 7, -3];
arr.sum = 2;
for (var key in arr) {
  console.log(arr[key]);
}
// в консоль будет выведено 5, 7, -3, 2

Если вам такой сценарий не нужен, то тогда для перебора массивов лучше использовать обычный цикл for.

Использование цикла for…in для перебора символов в строке:

var str = 'Метод';
for (var key in str) {
  console.log(str[key]);
}
// М, е, т, о, д

Инструкции break и continue

Внутри тела цикла можно использовать специальные инструкции: break и continue.

Инструкция «break» предназначена для прекращения выполнения текущего цикла. Другими словами, она осуществляет выход и передачу управления инструкции, идущей после этого цикла.

Пример, в котором завершим цикл по перебору элементов массива, если его текущий элемент не будет являться числом:

// массив
var arr = [5, 3, "a", 4, "b", 16];
// цикл «for» для перебора массива arr
for (var i = 0, length = arr.length; i 

Инструкция «continue» предназначена для прекращения дальнейшего выполнения кода и перехода к следующей итерации цикла.

Пример, в котором найдём в слове «программирование» символы «а» и «о», и выведем их позиции в консоль:

// строка
var str = 'программирование';
// цикл "for" для перебора символов строки
for (var i = 0, length = str.length; i  ' + str[i]);
}
// данный цикл выведет в консоль: 2 => "о", 5 => "а", 10 => "о", 12 => "а"

Метки для break и continue

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

someLabel: while (условие) {
  // текло цикла
}

Далее после оператора break или continue необходимо указать эту метку:

someLabel: while (условие) {
  if (условие) {
    break someLabel;
  }
}

Вызов break someLabel приведёт к переходу в конец цикла, перед которым данная метка указана.

Если метка используется с ключевым словом continue, то в этом случае выполнение этого действия приведёт к немедленному переходу к следующей итерации цикла, перед которым данная метка указана.

В коде с одиночным циклом использование метки не даст никакого результата. Её есть смысл использовать только когда вам нужно выйти сразу из нескольких циклов.

Пример, в котором выйдем сразу из 2 циклов, когда произведение значений переменных-счётчиков даст число большее 10.

// обозначим внешний цикл, используя метку outer
outer: for (var i = 2; i  10) break outer;
    // выведем в консоль
    console.log(i + ' * ' + j + ' = ' + i * j);
  }
}
// в консоль будет выведено: 2 * 2 = 4, 2 * 3 = 6, 2 * 4 = 8, 3 * 2 = 6, 3 * 3 = 9

Кроме этого, операторы break и continue нельзя использовать в выражениях тернарных операторов.

Цикл for...of (новинка в ES6)

Цикл for...of появился в стандарте ES6. Предназначен он для перебора итерируемых объектов, т.е. объектов, в которых реализован метод Symbol.iterator. Этот метод ещё называют итератором. Именно его и использует цикл for...of для перебора объектов.

Метод Symbol.iterator имеется у String, Array, Map, Set, arguments, NodeList и других объектов.

Пример использование цикла for...of для посимвольного перебора строки:

// переменная, содержащая строку
let str = 'Новый';
// посимвольный перебор строки
for (let char of str) {
  console.log(char);
}
// в консоль будет выведено: "Н", "о", "в", "ы", "й"

Пример использование цикла for...of для перебора коллекции DOM-элементов:

let elements = document.querySelectorAll('p');
for (let element of elements) {
  console.log(element);
}

Пример использование цикла for...of для перебора массива:

// массив
let superHeroes = ['Iron Man', 'Thor', 'Hulk'];
// перебор массива
for (let value of superHeroes) {
  console.log(value);
}
// в консоль будет выведено: "Iron Man", "Thor", "Hulk"

Чем цикл for...of отличается от for...in

Первое отличие цикла for...of от for...in заключается в том, что он может применяться только для итерируемым объектов, т.е. объектов, в которых реализован итератор (Symbol.iterator). Цикл for...in итератор не использует. Он предназначен для перебора любых объектов.

Второе отличие заключается в том, что цикл for...of перебирает объект так, как это определено в итераторе. Например, в Array итератор реализован так, что цикл for...of пройдёт только по значениям в массиве и не будет включать в перебор другие (не индексные) свойства. Цикл for...in организован по-другому, он перебирает все перечисляемые свойства (имена ключей) объекта, в том числе и наследуемые.

Рассмотрим эти отличия. Для этого возьмём предыдущий пример и добавим к нему пользовательское свойство, например, hero и установим ему значение 'Wasp'.

let superHeroes = ['Iron Man', 'Thor', 'Hulk'];
superHeroes.hero = 'Wasp';

При использовании for...of он переберёт все значения этого массива:

// цикл for...of
for (let value of superHeroes) {
  console.log(value);
}
// в консоль будет выведено: "Iron Man", "Thor", "Hulk"

При использовании for...in он переберёт все перечисляемые имена ключей этого объекта:

// цикл for...in
for (let key in superHeroes) {
  console.log(key);
}
// в консоль будет выведено: 0, 1, 2, "hero"

Чтобы получить значение ключа по его имени можно воспользоваться квадратными скобками:

// цикл for...in
for (let key in superHeroes) {
  console.log(superHeroes[key]);
}
// в консоль будет выведено: "Iron Man", "Thor", "Hulk", "Wasp"

Самостоятельное создание итератора для объекта

Рассмотрим ещё один пример. В этом примере мы самостоятельно определим как должен итерироваться объект. Для этого создадим объект и определим ему итератор.

Создание итератора начинается с добавления к объекту специального метода. Этот метод необходимо спроектировать так, чтобы он возвращал значения последовательно (одно за другим). Название методу согласно стандарту необходимо определить с помощью символа Symbol.iterator. Итератор должен возвращать всего один метод next(). Этот метод в свою очередь тоже должен возвращать объект, состоящий из 2 свойств: value и done. Ключ done - булевый. Он определяет есть ли ещё значения в последовательности (false - да, true - нет). Ключ value должен содержать следующее значение последовательности.

let car = {
  color: 'black',
  brand: 'Ford',
  // создадим итератор, используя символ
  [Symbol.iterator]() {
    // получим имена перечисляемых свойств объекта
    const keys = Object.keys(this);
    // создадим переменную (текущий индекс последовательности)
    let index = 0;
    return {
      next() {
        let done = index >= keys.length;
        let value = done ? undefined : keys[index++];
        return {
          value,
          done
        }
      }
    }
  }
}

for (let key in car) {
  console.log(key + ' => ' + car[key]);
}
// в консоль будет выведено: color => "black", brand => "Ford"

Что такое JSON

JSON расшифровывается как аббревиатура от J ava S cript O bject N otation. JSON — это стандартный текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}.

В JSON, ключи всегда строки, в то время как значение может быть string, number, true или false, null, object или array. Строки должны быть заключены в двойные кавычки "и могут содержать управляющие символы, такие как \n, \tи \. JSON более компактный, чем xml, поэтому он более предпочтителен для обмена данными между веб-браузером и сервером.

Синтаксис JSON на примерах

Объект JSON может выглядеть так:

Пример

{
  "ФИО" : "Иванов Иван",
  "Адрес" : {
    "Город" : "Киров",
    "Улица" : "Вербицкого",
    "Дом" : "7"
  }
}

В то время как пример массива JSON будет выглядеть примерно так:

Пример

{
    "smarts": [
        "Apple",
        "ASUS",
        "Huawei",
        "Lenovo"
    ]
}

PHP и JSON

Структуры данных JSON очень похожи на массивы PHP. В языке PHP существуют специальные функции для кодирования и декодирования данных JSON. Это функции json_encode() и json_decode() соответственно. Они уже встроены в ядро PHP, поэтому никаких библиотек подключать не нужно. Обе функции работают только со строковыми данными в кодировке UTF-8.

Кодирование данных JSON в PHP

В PHP функция json_encode() используется для кодирования значения в формат JSON. Кодируемое значение может быть любым типом данных PHP, кроме ресурса, такого как база данных или дескриптор файла.

Синтаксис

string json_encode ($value [, int $options = 0 [, int $depth = 512 ]] )

Параметры

value
- значение, которое будет закодировано. Может быть любого типа за исключением resource. Все строковые данные должны быть в кодировке UTF-8.
options
Битовая маска составляемая из значений JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
depth
Задает максимальную глубину. Должен быть больше нуля.

В приведенном ниже примере показано, как кодировать ассоциативный массив PHP в объект JSON:

65, "Harry"=>80, "John"=>78, "Clark"=>90);
 
echo json_encode($marks);
?>

Результат приведенного выше примера будет выглядеть так:

{"Peter": 65, "Harry": 80, "John": 78, "Clark": 90}

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

65, "Игорь"=>80, "Денис"=>78, "Николай"=>90);
 
echo json_encode($marks);
?>

Результат приведенного выше примера будет выглядеть так:

{"\u041f\u0451\u0442\u0440":65,"\u0418\u0433\u043e\u0440\u044c":80,"\u0414\u0435\u043d\u0438\u0441":78,"\u041d\u0438\u043a\u043e\u043b\u0430\u0439":90}

Как видно кириллица кодируется, исправляется это добавлением опции: JSON_UNESCAPED_UNICODE.

65, "Игорь"=>80, "Денис"=>78, "Николай"=>90);
 
echo json_encode($marks, JSON_UNESCAPED_UNICODE);
?>

Результат выполнения кода:

{"Пётр": 65, "Игорь": 80, "Денис": 78, "Николай": 90}

Точно так же вы можете закодировать индексированный массив PHP в массив JSON, например:

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

Результат выполнения кода:

["Красный","Зелёный","Синий","Оранжевый","Жёлтый"]

Если применить параметр JSON_FORCE_OBJECT, то функция json_encode() будет возвращать индексированный массив PHP как объект JSON:

Результат выполнения кода:

{"0":"Apple","1":"ASUS","2":"Huawei","3":"Lenovo","4":"Samsung"}

Примечание: Неассоциативный массив может быть закодирован как массив или объект. Однако ассоциативный массив всегда кодируется как объект.

Декодирование данных JSON в PHP

Функция PHP json_decode() используется для декодирования JSON в PHP. Эта функция возвращает значение, декодированное из json в соответствующий тип данных PHP.

Синтаксис

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

Параметры

json
- json строка (string) для декодирования. Эта функция работает только со строками в UTF-8 кодировке.
assoc
Если TRUE, возвращаемые объекты будут преобразованы в ассоциативные массивы.
depth
Указывает глубину рекурсии.
options
Битовая маска опций декодирования JSON. В настоящий момент поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))

В следующем примере показано, как декодировать или преобразовать объект JSON в объект PHP:

Результат выполнения кода:

object(stdClass)#1 (4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) }

Функция json_decode() по умолчанию возвращает объект. Если нужно JSON декодировать в ассоциативный массив, то укажите значение второго параметра $assoc в качестве true. По умолчанию его значение — false:

Результат выполнения кода:

array(4) { ["Peter"]=> int(65) ["Harry"]=> int(80) ["John"]=> int(78) ["Clark"]=> int(90) }

Доступ к декодированным значениям JSON в PHP

Теперь рассмотрим пример, который показывает, как декодировать данные JSON и получить доступ к отдельным элементам объекта JSON в PHP:

Peter; // вывод 35
echo $obj->Ben;   // вывод 37
echo $obj->Joe;   // вывод 43
?>

В этом примере показано, как получить доступ к отдельным элементам ассоциативного массива PHP:

Вы также можете перебирать декодированные данные с помощью цикла foreach(), например:

$value){
    echo $key . "=>" . $value . "
"; } echo "
"; // Декодируем данные JSON в объект PHP $obj = json_decode($json); // Перебираем в цикле значения объекта foreach($obj as $key=>$value){ echo $key . "=>" . $value . "
"; } ?>

Оператор if/else и elseif

Наиболее часто в коде вы будете сталкиваться именно с этим оператором. В общем виде он записывается вот так:


if($a > $b) {
  //Действие 1 если условие истинно и $a действительно больше $b
} else {
 //Действие 2 если условие ложно
}

Есть дополнительный оператор elseif() который позволяет проверить ещё одно или несколько условий прямо в этом ветвлении.


if($a > $b) {
  //Действие 1 если условие истинно и $a действительно больше $b
} elseif($a 

Следует отметить что php язык с динамической типизацией и если в if() передать какое-то число php будет пытаться преобразовать его в тип bool и на основе полученного результата принять решение о дальнейшем выполнении кода. Например положительное целое 1 (тип int) с лёгкостью приводится в true типа bool. Это и удобно и не удобно одновременно. Динамическая типизация позволяет разрабатывать приложение быстро, однако  очень легко словить логическую ошибку. Т.е. программа будет работать «верно» но делать не то, что от неё ожидается. Случается это как раз потому, что порой  автоматическое приведение типа выражения в if() к логическому значению ведёт выполнение программы не в то русло.

И так, блоков ifelse() { ... } как вы понимаете можно добавить много. Однако для такого случая в php предусмотрен специальный оператор switch case о котором пойдёт речь ниже.

Оператор switch/case

Допустим у нас на входе есть некая переменная $type которая содержит строковое обозначение типа поля в веб-форме, которую вам необходимо вывести на экран. Значения могут быть такими:

  1. S — строка, обычное текстовое поле
  2. N — число
  3. E — email адрес
  4. C — чекбокс
  5. R — радиобокс
  6. T — текстовая область textarea
  7. B — кнопка
  8. L — выпадающий список

Если использовать коyструкцию if() { ... } elseif() { ... } esle { ... } получаем довольно громоздкий код:


if($type == 'S') {
  //Выводим текстовое поле
} elseif($type == 'N') {
  //Выводим числовое поле
} elseif($type == 'E') {
  //Выводим поле ввода email-адреса
} elseif($type == 'C') {
  //Выводим checkbox
} elseif($type == 'R') {
  //Выводим radiobox
} elseif($type == 'T') {
  //Выводим textarea
} elseif($type == 'B') {
  //Выводим кнопку
} elseif($type == 'L') {
  //Выводим выпадающий список
} else {
  //Выводим скрытое поле hidden
}

Как я у же говорил выше, для таких множественных ветвлений используется конструкция switch (проверяемое значение) { case значение: действие brack; }.


switch ($type){
    case 'S':
        //Выводим текстовое поле
    break;
    
    case 'N':
        //Выводим числовое поле
    break;
    
    case 'E':
        //Выводим поле ввода email-адреса
    break;
    
    case 'C':
        //Выводим checkbox
    break;
    
    case 'R':
        //Выводим radiobox
    break;
    
    case 'T':
        //Выводим textarea
    break;
    
    case 'B':
        //Выводим кнопку
    break;
    
    case 'L':
        //Выводим выпадающий список
    break;
    
    default:
        //Выводим скрытое поле hidden
}

Условие так же довольно громоздко, но воспринимается в коде проще.

Тернарный оператор сравнения

Иногда вам необходимо встроить небольшую проверку значения например в цикл формирования массива php. Вставлять туда полноценный if() {…} else {…} неудобно, т.к. код получится слишком громоздким. Для решения этой проблемы в php предусмотрен тернарный оператор сравнения. Его синтаксис можно описать следующим образом:


(условие) ? действие когда условие истино : действие когда условие ложно;

Под действием в данном случае подразумевается возврат или вывод какого-то значения. Например, формируем некоторый массив и округляем значение если оно является числом:


//некоторый массив входных значений
$arr = [12154.14215, 2.225, 'test', 3.14, 'bbb', 'aa', 5, 11];
$arrRes = [];

foreach ($arr as $item) {
    $arrRes[] = (is_numeric($item)) ? round($item, 2) : $item;
}

echo '
'; var_dump($arrRes); echo '
';

В примере мы перебираем массив элементы массива, проверяем являются ли они числом при помощи функции is_numeric(), если результат истинный, округляем число функцией round()  до двух знаков после запятой иначе отдаём значение в том виде как получили в массив $arrRes. Как видите вся проверка выполнена в одну строку при помощи тернарного условия. В результате в $arrRes будет такой массив:


array(8) {
  [0]=>
  float(12154.14)
  [1]=>
  float(2.23)
  [2]=>
  string(4) "test"
  [3]=>
  float(3.14)
  [4]=>
  string(3) "bbb"
  [5]=>
  string(2) "aa"
  [6]=>
  float(5)
  [7]=>
  float(11)
}