Проверить ассоцативный ли массив

zip111

Новичок
Проверить ассоцативный ли массив

Как можно узнать тип массива? Например мне нужно проверить ассоциативный ли массив?

первая мысль была if (sizeof(array_keys(array('asd', 'asd'))) == 0)
но ведь даже в простом массиве типа array('sad', 'sadf'); есть ключи Array ( [0] => asd [1] => asd )
 

zip111

Новичок
ну, грубо говоря у меня происходит разбор входящих данных. Система проверяет если это строка - она обрабатывает её по одному, если ассоциативный массив - по другому. А потом результат обоих обработок записывает в массив. В итоге конечный массив выходит в формате

[0] => 'asd'
[1] => 'asdasd'
[retertre] => 'sdfsdfsdafsd'
[3] => 'dsfsdfsdaf'
[sdfsdfsdf] => 'sdfsdfsdafdsa'
[5] => '234234'
т.е. грубо говоря "смешанный" массив данных.

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

Фанат

oncle terrible
Команда форума
бред какой-то.
зпчем делать на выходе смешанный массив?
почему нельзя строки оставить строками, а массив - массивом?

что за данные, в которых "строки" надо "подмешивать в массив"?
 

fixxxer

К.О.
Партнер клуба
этого не нужно хотеть. :) но если нужно чтобы ключи были не только числовые но еще и упорядоченные (то есть строго 0,1,2) - то есть простой способ $a===array_values($a), еще раз повторяю что хотеть этого не нужно, мне просто понравился пришедший вдруг в голову способ ;))
 

zip111

Новичок
зпчем делать на выходе смешанный массив?
почему нельзя строки оставить строками, а массив - массивом?
Ну после этой процедуры происходит дальнейшая обработка, а в моем случае, проще обработать один конечный массив, чем отдельно строки и отдельно массивы.

Не суть в том, какие данные приходят. Суть в том, как это реализовать?
 

fixxxer

К.О.
Партнер клуба
а что у тебя за проблема то с "перезаписываением"? решать то ее надо, а не хрен знает что
 

zip111

Новичок
а что у тебя за проблема то с "перезаписываением"? решать то ее надо, а не хрен знает что
так вот как раз один из пришедших в голову решений - это реализовать проверку на тип массива, а далее уже дело техники... :)
 

fixxxer

К.О.
Партнер клуба
ты можешь объяснить откуда вообще взялась проблема?
 

zip111

Новичок
я выше уже всё написал. Повторяю, что в моем случае, для того, что бы ключи в выходном массиве не переписывались, нужно проверить тип массива. Если ассоциативный - сохраняею его как $array[key($blablabla)] = 'blablabla', если нет - $array[sizeof($array)] = 'blablabla';

-~{}~ 01.11.07 19:23:

Конечно, можно поизвращаться и проверять тип ключа массива, если (int) - значит "обычный массив", если нет - ассоциативный. Но я чувствую, что есть более логичесское решение.

-~{}~ 01.11.07 19:33:

короче говоря, так и сделал
PHP:
is_int(key($replacements)) ? $key = sizeof($this->patterns) : $key = key($replacements);
 

MiksIr

miksir@home:~$
Кстати, проблема различия массивов была у меня. В классе баз данных, так как нужно было различать массив и хеш и по-разному их оборачивать. Если взять допуск, что массивы не могут быть смешанные, то легко решается проверкой первого элемента на равенство нулю.
 

Popoff

popoff.donetsk.ua
zip111
я выше уже всё написал. Повторяю, что в моем случае, для того, что бы ключи в выходном массиве не переписывались, нужно проверить тип массива. Если ассоциативный - сохраняею его как $array[key($blablabla)] = 'blablabla', если нет - $array[sizeof($array)] = 'blablabla';
Это не проблема. Это придуманный тобой способ решения проблемы. А в чём сама проблема состоит?

$array[key($blablabla)] = 'blablabla',
$array[sizeof($array)] = 'blablabla';
в чём отличие $blablabla от 'blablabla', $array от array() и что делают эти две конструкции?
 

korchasa

LIMB infected
Автор оригинала: zip111
я выше уже всё написал. Повторяю, что в моем случае, для того, что бы ключи в выходном массиве не переписывались, нужно проверить тип массива. Если ассоциативный - сохраняею его как $array[key($blablabla)] = 'blablabla', если нет - $array[sizeof($array)] = 'blablabla';
Используйте коллекцию, а не массив.
 
Сверху