我正在遍历数组的元素。 我得到了数组中元素的总数:
$total = count($myarray);
我的分页功能加载页面上的当前元素,并提供具有以下网址的“上一页”和“下一页”链接:
http://myapp.com?page=34
如果你单击链接我抓住它并通过获取(我清理$ _GET,这只是例如)加载到页面上:
$element = $myarray[$_GET['page']];
这应该使用键== $ _GET ['page']来获取数组元素,并且确实如此。但是,问题是我的元素总数与某些键不匹配,因为虽然数组中有100个元素,但缺少某些数字,因此第100个项实际上有102个键。
我该怎么做?我是否需要重写密钥以匹配可用的元素数量?其他一些方法?感谢您的投入。
答案 0 :(得分:2)
如果索引中有间隙,则应重新索引数组。您可以在生成链接之前执行此操作,也可以在接收页面上更轻松地执行此操作:
$myarray = array_values($myarray);
$element = $myarray[$_GET['page']];
这将为您提供第100个元素,即使它之前有密钥102.(当然,如果您需要保留原始索引,可以使用临时数组。)
答案 1 :(得分:1)
我该怎么做?我需要 重写密钥以匹配 可用的元素数量?一些 其他方法?
不,你不需要担心它们不匹配。 Php数组是associative containers,就像其他语言中的字典一样。如果你定义98和100的东西,99不在内存中,关联容器后面的数据结构只存储什么。你不是在浪费空间而不是“填补”数量。
所以你描述的做法很好。如果没有页面“99”,则无需在阵列中显示任何内容。但是,看到您的数组没有“page”参数的任何内容并显示错误消息可能会很好。
但是为什么,当我访问$ total =时 算($ myarray的); $ myArray的[$总] 其中$ total = 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";
此处count($ myArray)为2.
在第一种情况下,访问$ myArray [3]是没有意义的,因为没有任何东西。显然,在第二个例子中,2处没有任何内容。
答案 2 :(得分:1)
你可以使用
$array = array_values($array);