Если array.length в JavaScript возвращает undefined

Август 26, 2012

Уже не в 1-й раз в своей практике программирования в стиле PHP + JavaScript сталкиваюсь с проблемой, что когда посредством AJAX PHP возвращает массив в формате JSON, узнать его длину в JavaScript невозможно. Речь идет об неассоциативном массиве. Например:

<?php
$array = array( 1, 2, 3 ); // неассоциативный массив
?>

Данный массив без заданных ключей (индексов). Доступ к элементу получается через порядковый номер $array[ 0 ].

Интересный факт заключается в том, что если пересортировать массив, а точнее собрать на основе 1-го – 2-й и сделать замену, то функция JavaScript "length" работать не будет. Выглядит это примерно так:

<?php
$array_1 = array( 1, 2 );
$array_2 = array();

$array_2[ 1 ] = $array_1[ 0 ];
$array_2[ 0 ] = $array_1[ 1 ];

$array_1 = $array_2;
?>

После возвращения массива $array_1 функция JavaScript "length" вернет "undefined".

Для избежания проблемы, сначала массив нужно пересортировать, а затем составить новый:

<?php
asort( $array_1 );

foreach ( $array_1 as $value ) {
	$array_2[] = $value;
}

$array_1 = $array_2;

Итог

Все сводится к тому, что элементы в массиве должны идти от 0 элемента без разрыва и числовые ключи не должны задаваться явно.

Запись опубликована Воскресенье, Август 26, 2012 в 08:31 и находится в JavaScript, Программирование . Вы можете следить за ответами к этой записи через RSS 2.0 ленту. Вы можете оставить комментарий, или обратиться к записи со своего сайта.

Оставить Комментарий

*