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

  • Автор темы Автор темы eddie
  • Дата начала Дата начала
Фанат:
да

Demiurg:
что each?

речь идет о $массив[$переменная_цикла]
 
>что each?
ссылку нажми, там какараз то, что тебе надо.
 
1. беру свои слова назад. не хамишь. мне показалось.
2. см. ниже
3. ты мог научиться например, не использовать эту бесполезную функцию. ты ведь что-то делаешь с массивом после проверки?
почему этого не делать сразу, исключив совершенно бесполезный пперебор?
4. как раз поинтересовались. но ты внятно так и не смог ответить. ты поделился своими бедами, но не сказал, как ты поступаешь по результатам этой функции.

А демиург требует свое пиво, исходя из вот этой твоей формулировки:
"как это не различает, попробуй сделай цикл for по ассоциативному массиву -- только foreach"
дело в том, что проблема отличия массивов никакого отношения к циклу фор не имеет. Ну то есть вообще. цикл фор ничего не РАЗЛИЧАЕТ. он тупо подставляет индексы.
и форич - тоже ничего не РЗЛИЧАЕЬ - он тупо перебирает массив.
и РНР - НЕ РАЗЛИЧАЕТ.
а ты, в опровержение этого утверждение говоришь совершенно дикие вещи про фор
 
for($i="a";$i<"d";$i++) echo $arr[$i];

вообще-то, этот код к проблеме "определения" типа массива не имеет никакого отношения.
я привожу его только для того, чтобы показать всю абсурдность связывания тима массива и for

Да.
Самое главное, чему ты должен был научиться.
1. слушать людей. которые если тебе говорят, что не различает РНР - то так оно и есть
2. собственно то, что РНР не различает.
а различаешь ТЫ САМ.
ты сам для себя придумал определения, привязал эти определения к словам и пришел нам доказывать, навязывать свое видение.
 
весь сыр-спор из-за того, что ты, не понимая смысла термина "простой массив", придумал собственное определение, завязанное на операторе for.
 
"как это не различает..."
соглашусь что не совсем корректно выразился -- РНР действительно одинаково хранит эти массивы. Я больше имел ввиду, что программеру надо их различать

Теперь насчет применения.

естественно мне и в голову не придет делать

PHP:
if(isAssosArray($a)
foreach(....)
else
for(...)

не дождетесь :)

а надо мне это для передачи данных в jscript (для своей CMS)

$a=Array(1,2,3,4,5) будет выглядить как a=[1,2,3,4,5]
a
$b=Array('a'=>1,'b'=>2,'c'=>3) будет выглядить как b={'a':1,'b':2,'c':3}
 
естественно мне и в голову не придет делать

if(isAssosArray($a)
foreach(....)
else
for(...)

не дождетесь

а надо мне это для передачи данных в jscript (для своей CMS)
а как же ты изготавливаешь эти яваскриптовские массивы?
 
ну, если, по твоим словам не пользуешься конструкцией
if(isAssosArray($a)
foreach(....)
else
for(...)
то как?
 
я пользуюсь foreach для перебора массива, но при генерации кода мне надо знать какой это массив

да вот кусок кода

PHP:
...
case 'array':
	$vark=$varv=Array();
	$i=0;
	$assoc=0;
	foreach($var as $k=>$v)
	{
		if(!$assoc&&($k!==$i))$assoc=1;
		$vark[$i]=p2ji($k);
		$varv[$i]=p2jr($v);
		$i++;
	}
	if($assoc)
	{
		foreach($varv as $k=>$v)
			$varv[$k]=$vark[$k].':'.$v;
		return '{'.join(',',$varv).'}';
	}
	else
		return '['.join(',',$varv).']';
...
 
может проще считать все массивы ассациативными ?

зы p2ji - хорошее название для функции.
 
было бы проще -- так бы и сделал
но в js есть неприятность (я об этом уже говорил)

a=[1,2,3] // a.length=3
b={0:1,1:2,2:3} // b.length is undefined

у меня много таких названий :)
 
но ты же ассациативные массивы проходишь как то.
 
ну вот, и обходи все одинаково. зачем тебе не ассациативные массивы ?
 
1. мне бывает нужно знать "длину" массива до того как его обходить, a делать len=0;for(i in a)len++ -- не совсем хорошо

2. иногда на клиенте мне надо использовать другие array-functions (.slice(), .shift(), etc.)

3. добавлять элементы неудобно (b[b.length]=newValue не работает)
 
что то у тебя массивы на сервере, массивы на клиенте, все смешалось. обычно это до добра не доводит.
 
Сверху