Отличить два массива

Статус
Закрыто для дальнейших ответов.

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Два типа массивов:
Тип 1 (просто переменная-массив):
Код:
$array = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
Тип 2 (вложенный массив):
Код:
$array[] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array[] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array[] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array[] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
Как отличить эти массивы, чтобы далее работать с ними? Например:
Код:
function array_type($array) {
//Если нам передан в переменной массив первого типа
if() {
Действие 1
}
//Если в переменной передан массив второго типа
else {
//Действие 2
}
}
Мне пришло в голову только вариант с посыланием в функцию дополнительного параметра $param, который будет отвечать за тип массива.
Например $param == 1, то массив первого типа, иначе массив второго типа. Но хотелось бы без этого :(
 

CamaroSS

Well-Known Member
Регистрация
21.02.2012
Сообщения
176
Для этого есть классы. А вообще можно проверять is_array для элемента.
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
Для этого, действительно, существуют классы.

Но, если извращаться с массивами, то я бы вложил массив с параметрами и от него делать условие.
Код:
<?php
//Тип №1
$array["params"] = array('type' => 'first_type');
$array["data"] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);

//Тип №2
$array["params"] = array('type' => 'second_type');
$array["data"][] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array["data"][] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array["data"][] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);
$array["data"][] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);

function array_type($array) {
//Если нам передан в переменной массив первого типа
if($array["params"]["type"] == "first_type") {
//Действие 1
}
//Если в переменной передан массив второго типа
else {
//Действие 2
}
}
?>
 

brevis

Well-Known Member
Регистрация
10.08.2010
Сообщения
452
А я бы вообще избавился от массива типа 1. Просто перед присвиваанием скобочки добавил бы:

[font=courier new']$array[] = array('name' => 'Текст', 'size' => 102545, 'width' => 240, 'height' => 160);[/font]

И вопрос определения типа сразу бы исчез. Такое себе хакерское решение задачи в 2 байта :)

Ну а если все же нужно проверять -- то просто проверяем первый элемент массива:

Код:
...
if ( is_array(current($array)) ) {
// тип 2
} else {
// тип 1
}
...
 

mrlasking

$_GET['rich'] or die('trying');
Регистрация
22.05.2012
Сообщения
323
[member=brevis], тут весь вопрос - будут ли у него одинаковыми эти массивы. А то сделаешь оба двумерными - а Фоксу нужны разные наборы действий. Зависит от логики. Хотя, какраз таки логики, в использовании массивов, в подобных случаях, я и не усматриваю)
 

FiRеFоX

V.I.P.
Регистрация
07.08.2010
Сообщения
744
Начал я расписывать почему так получилось с массивами, но удалил это дело, а то получается какое-то сочинение на тему "Как я писал код раньше и почему теперь переделывать не охото".
Сделаю, как посоветовал Бревис с добавлением скобочек. В таком случае будет всего меньше манипуляций с изменением кода и не придется ожидать всплывающих из неоткуда багов.
Чем больше разрастается код, тем сложнее его редактировать. Тут поменяешь - там дыра, тут залепишь её - в другом месте баг.
Где то на хабре читал что-то подобное:
Код:
Первое правило программиста:
1. Не лезть в большой скрипт, который хоть как-то работает, иначе обязательно доломаешь и придется вообще его переделывать.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ