PHP - 没有从数组中获取我期望的元素

问题描述 投票:0回答:3

我正在对数组的元素进行分页。 我通过以下方式获取数组中元素的总数:

$total = count($myarray);

我的分页功能加载页面上的当前元素,并提供“上一个”和“下一个”链接,其网址如下:

http://myapp.com?page=34

如果您单击链接,我会抓取该链接并将其加载到页面上(我清理 $_GET,这只是示例):

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

这应该使用 key == $_GET['page'] 来获取数组的元素,并且确实如此。然而,问题是我的元素总数与某些键不匹配,因为虽然数组中有 100 个元素,但缺少某些数字,因此第 100 个项目实际上有一个键 102。

我应该怎么做?我是否需要重写键以匹配可用的元素数量?还有其他方法吗?感谢您的意见。

php arrays pagination
3个回答
2
投票

如果索引中有间隙,您应该重新索引数组。您可以在生成链接之前执行此操作,或者在接收页面上可能更容易执行此操作:

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

这将为您提供第 100 个元素,即使它之前的键为 102。(当然,如果您需要保留原始索引,您可以使用临时数组。)


1
投票

你可以使用

$array = array_values($array);

1
投票

我应该怎么做?我需要吗 重写密钥以匹配 可用的元素数量?一些 其他方法?

不,您无需担心它们不匹配。 PHP 数组是关联容器,就像其他语言中的字典一样。如果您在 98 和 100 处定义某些内容,则 99 不会位于内存中,关联容器后面的数据结构仅存储那里的内容。您不会因未“填满”计数而浪费空间。

所以你描述的做法没问题。如果没有页面“99”,则阵列中不需要显示任何内容。然而,看到您的数组没有任何“page”参数并显示错误消息可能会很好。

但是为什么当我访问 $total = 计数($myarray); $myarray[$总计] 其中 $total = 100 我不明白 最后一个元素?我可以把 page=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";

这里 count($myArray) 是 2。

在第一种情况下,访问 $myArray[3] 是没有意义的,因为那里什么也没有。显然,在第二个示例中,2 处没有任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.