PHP,产生从阵列与数字
问题描述:
上一页和下一页的链接我有一个这样的数组:PHP,产生从阵列与数字
$pages = (1, 29, 209, 389, 440, 527)
而且我想通过这些页面进行简单的HTML导航。只有“第一”,“最后”,“上一页”和“下一页”链接。 当我点击'下一个'/'prev'链接时,他们必须相应地改变。 例如当我在389页prev和next是209和440。如果我在440页prev和next是389和527
答
这里有一个简单的方法:
$pages = array(1, 29, 209, 389, 440, 527);
$current = isset($_GET['page']) ? $_GET['page'] : $pages[0];
// current page
$key = array_search($current, $pages);
echo 'current page: ' . $pages[$key] . '<br />';
// previous page
$prev = $key - 1;
if ($prev >= 0 && $prev < count($pages)) {
echo '<a href="?page=' . $pages[$prev] . '">prev</a> | ';
} else {
echo 'prev | ';
}
// next page
$next = $key + 1;
if ($next >= 0 && $next < count($pages)) {
echo '<a href="?page=' . $pages[$next] . '">next</a>';
} else {
echo 'next';
}
假设键将永远是为了,那么第一页将始终为$pages[0]
,并获得最后你可以使用$pages[key(array_slice($pages, -1, 1, true))]
答
试试这个:
<?php
$pages = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$active = 1;
$last = false;
$next = false;
if (isset($_GET['page']))
{
$active = $_GET['page'];
$last = $active - 1;
$next = $active + 1;
if (!in_array($next, $pages))
{
$next = false;
}
if (($last < 0) or !in_array($last, $pages))
{
$last = false;
}
}
?>
<ul>
<li>
<a href="<?= $last != false ? '?page=' . $last : '' ?>"><- LAST</a>
</li>
<?php foreach ($pages as $page): ?>
<li><a href="?page=<?= $page ?>"><?= $page ?> <?= $page == $active ? ' is active!' : ''?></a></li>
<?php endforeach; ?>
<li>
<a href="<?= $next != false ? '?page=' . $next : '' ?>">NEXT -></a>
</li>
</ul>
答
<ul>
<?php
$pages = [1,4,89,100,121,224,443,527];
$thisPage = $_GET['page'];
foreach($pages as $key => $page){
if($thisPage == $page){
$thisPageKey = $key;
}
}
foreach($pages as $key => $page){
if($key==0){
echo '<li><a href="HOST?page='.$pages[0].'">first</a></li>';
}
if($key+1==count($pages)){
echo '<li><a href="HOST?page='.$pages[$key].'">last</a></li>';
}
if(array_key_exists($thisPageKey-1, $pages) && $thisPage == $page){
echo '<li><a href="HOST?page='.$pages[$thisPageKey-1].'">prev</a></li>';
}
if(array_key_exists($thisPageKey+1, $pages) && $thisPage == $page){
echo '<li><a href="HOST?page='.$pages[$thisPageKey+1].'">next</a></li>';
}
}
?>
</ul>
答
function printPager($pageList,$currentPage)
{
$links="";
if(($currentIndex = array_search($currentPage, $pageList))!== NULL)
{
$links .=
//first
($currentIndex!=0?"<a href='/".($pageList[0])."'>First</a> ":"") .
//prev
(isset($pageList[$currentIndex-1])?"<a href='/".($pageList[$currentIndex-1])."'>Prev</a> ":"").
//next
(isset($pageList[$currentIndex+1])?"<a href='/".($pageList[$currentIndex+1])."'>Next</a> ":"").
//last
($currentIndex!=count($pageList)-1?"<a href='/".($pageList[count($pageList)-1])."'>Last</a>":"");
}
echo $links;
}
printPager(array(20,4,10,14),20);
答
你可以试试这个
$pages=array(1, 29, 209, 389, 440, 527);
foreach ($array_keys=array_keys($pages) as $array_keys) {
$pages_invert[ $pages[$array_keys] ]=$array_keys;
}
echo '<a href="navi.php?page_id='.$pages[0].'">first ('.$pages[0].')</a>';
echo ' | ';
if($pages_invert[$_GET['page_id']]-1 >= 0) echo '<a href="navi.php?page_id='.$pages[$pages_invert[$_GET['page_id']]-1].'">previous ('.$pages[$pages_invert[$_GET['page_id']]-1].')</a> ';
else echo 'previous';
echo ' | ';
echo 'current ('.$_GET['page_id'].')';
echo ' | ';
if($pages_invert[$_GET['page_id']]+1 <= 5) echo '<a href="navi.php?page_id='.$pages[$pages_invert[$_GET['page_id']]+1].'">next ('.$pages[$pages_invert[$_GET['page_id']]+1].')</a>';
else echo 'next';
echo ' | ';
echo '<a href="navi.php?page_id='.$pages[count($pages)-1].'">last ('.$pages[count($pages)-1].')</a>';
的的foreach命令在$页阵列,使原来的阵列用于跳跃的反转,从目前到一个和下一个数组的键。
要预览阵列的样子,把这个代码: 任何线ARTER您$网页数组定义
<?
echo '<pre>';
print_r($pages);
echo '</pre>';
echo '<pre>';
print_r($pages_invert);
echo '</pre>';
?>
请注意在$页面阵列是3项最小的项目。