PHP - не получить ожидаемый элемент из массива - PullRequest
1 голос
/ 23 апреля 2011

Я пролистываю элементы массива.Я получаю общее количество элементов в массиве с помощью:

$total = count($myarray);

Моя функция подкачки загружает текущий элемент на странице и предоставляет ссылки «Предыдущий» и «Следующий», которые имеют URL-адреса, такие как:

http://myapp.com?page=34

Если вы щелкнете по ссылке, которую я получу, и загрузим ее на страницу, получив (я очищаю $ _GET, это только для примера):

$element = $myarray[$_GET['page']];

Это должно захватить элементмассив с ключом == $ _GET ['page'] и это делает.Однако проблема в том, что мое общее количество элементов не совпадает с некоторыми ключами, потому что, хотя в массиве 100 элементов, определенные числа отсутствуют, поэтому у 100-го элемента фактически есть ключ 102.

Как следуетЯ буду этим заниматься?Нужно ли переписывать ключи в соответствии с доступным количеством элементов?Какой-то другой метод?Спасибо за ваш вклад.

Ответы [ 3 ]

2 голосов
/ 23 апреля 2011

Если у вас есть пробелы в индексах, вы должны переиндексировать массив.Вы можете сделать это до того, как сгенерируете ссылки, или, возможно, проще на принимающей странице:

$myarray = array_values($myarray);
$element = $myarray[$_GET['page']];

Это даст вам сотый элемент, даже если раньше у него был ключ 102 (вы можете использовать временныймассив, конечно, если вам нужно сохранить исходную индексацию.)

1 голос
/ 23 апреля 2011

вы можете использовать

$array = array_values($array);
1 голос
/ 23 апреля 2011

Как я должен это делать? Нужно ли мне переписать ключи в соответствии с доступное количество элементов? Немного другой метод?

Нет, вам не нужно беспокоиться о том, что они не совпадают. Массивы php являются ассоциативными контейнерами , как словари на других языках. Если вы определяете что-то в 98 и 100, 99 не сидит там в памяти, структура данных за ассоциативным контейнером хранит только то, что там. Вы не тратите пространство, не «заполняя его» до счета.

Итак, практика, которую вы описываете, в порядке. Если нет страницы "99", то ничего не нужно отображать в вашем массиве. Однако может быть неплохо увидеть, что в вашем массиве нет ничего для параметра 'page', и вывести сообщение об ошибке.

Но тогда почему, когда я получаю доступ к $ total = рассчитывать ($ MyArray); $ MyArray [$ итого] где $ итого = 100 я не получаю последний элемент? Я могу поставить страницу = 101 и получить еще одну запись. Я не должен быть способен сделать это

Потому что count считает количество вещей в массиве. Если у вас есть массив с заполненными только четными элементами, то есть:

 $myArray[0] = "This";
 $myArray[2] = "is";
 $myArray[4] = "even";

Здесь count ($ myArray) равен 3. В [1] или [3] нет ничего. Может быть, это легче увидеть, когда вы берете числа из уравнения. Массивы могут иметь строковые индексы

 $myArray = array();
 $myArray["Hello"] = "A Bunch of";
 $myArray["World"] = "words";

Здесь счетчик ($ myArray) равен 2.

В первом случае не имеет смысла обращаться к $ myArray [3], потому что там ничего нет. Очевидно, что во втором примере ничего нет в 2.

...