如何取PHP数组的相邻位
应该是比较常见,根据id返回文章,然后底部加上相邻的文章链接,因为所有的文章都是放在一个表中的,所以同类文章的id未必是连续的,我的做法是取当前文章的分类,然后根据分类得到此类文章的id数组,按时间排列
当取相邻id的时候,就定位到数组的相应位置,然后去前一位后一位好了
可是PHP数组函数中好像没有位置的函数,如果是a,a之类的倒没什么问题,如果是更通用的,PHP数组不需要key是连续的,更未必是数字,相关的数组函数只有current, next, prev,end
初步的解决方案是
foreach( $id_arr as $id) {
if ( $id == $matched_id) {
$next = current($id);// 很奇怪为什么current变成下一个了,但我测试是这样的
prev($id_arr);
$prev = prev($id_arr);
}
}
这个代码看起来是可行的,但是他并没有考虑到边界的问题,似乎PHP并没有数组的边界检查函数,我只好这样做
if ($next == null){
$next = -1;
}
prev($id_arr);
$prev = prev($id_arr);
但是这样的话,在我这里,指针似乎并不往回走,所以$prev仍然是null, 该怎么做呢 不属于 CI,所以我给转移了。 你这样用array取ID太麻烦了。
假设当前文章ID为5。
取prev则 SELECT * FROM posts WHERE ID < 5 LIMIT 0, 1
取next则 SELECT * FROM posts WHERE ID > 5 LIMIT 0, 1
用CI的query builder也是相仿。 另外,next(), prev() 和 current() 都会返回 false 的。
你一定要用foreach的话,直接用 next()/prev()/current() 来检查,没必要用 if ($next == null) 。 select 是可以,但是每次都要操作数据库,数组看起来似乎麻烦,但是效率应该高不少
每次都用next()/prev()/current() 来检查,是不是太混乱了,next之后,指针就跑到下一个了,所以必须手动回来, 应该有边界检查的,尤其是php数组,key不必为连续整数,count-1 就完全没办法使用
页:
[1]