array_search()与最后一个键不匹配

时间:2017-05-22 01:17:25

标签: php arrays search

我正在尝试创建一个动态抓取特定页面的所有子页面的函数。然后它将检查当前页面是什么,并抓住接下来的三个页面以显示为预览。

最后一页ID为6120。 你可以硬编码$ pagesArray()和$ lastKey和$ match来查看结果。

$pagesArray(
[0] => 6135
[1] => 6139
[2] => 6176
[3] => 6178
[4] => 6163
[5] => 6152
[6] => 6167
[7] => 6183
[8] => 6201
[9] => 6190
[10] => 6172
[11] => 6197
[12] => 6205
[13] => 6154
[14] => 6120
);
$lastKey = 14;
$matches = 14;

当我转到最后一页时,页面ID是6120,这是数组的第14个ID。 它应返回前3页ID,但不会匹配。请帮忙。这是代码。 作为参考,$ matches == $ lastKey应该是我设置$ nextPagesArray()的条件的一部分。它们都是14,但它不匹配。

function getNext3PortfolioPages(){

global $post;

$currentPage = $post->ID;
$last = '';
$lastKey = '';
$pagesArray = array();
$nextPagesArray = array();

$args = array(
    'child_of' => '6115',
    'offset' => $post->ID
);

// get all the page id's that are children of page 6115
$result = get_pages($args);

// add the page id's to the $pagesArray
foreach ( $result as $page ){
    array_push($pagesArray, $page->ID);
}

//find the last page id in the array
$last = end($pagesArray);

// find the index of the last array value
$lastKey = key($pagesArray);

// find the index of the current page displayed
$matches = array_search($currentPage, $pagesArray);

// check to see if the current page index is the same as the end of the array 
// and set up the $nextPagesArray with the next 3
if ( (int)$matches == (int)$lastkey ) {
    //print_r('1');
    //print_r($pagesArray);
    array_push($nextPagesArray, $pagesArray[0]);
    array_push($nextPagesArray, $pagesArray[1]);
    array_push($nextPagesArray, $pagesArray[2]);

} elseif ( $matches == $lastkey - 1 ) {
    //print_r('2');
    array_push($nextPagesArray, $pagesArray[$lastKey]);
    array_push($nextPagesArray, $pagesArray[0]);
    array_push($nextPagesArray, $pagesArray[1]);

} elseif ( $matches == $lastkey - 2 ) {
    //print_r('3');
    array_push($nextPagesArray, $pagesArray[$lastKey - 1]);
    array_push($nextPagesArray, $pagesArray[$lastKey]);
    array_push($nextPagesArray, $pagesArray[0]);

} else {
    //print_r('4');
    array_push($nextPagesArray, $pagesArray[$matches + 1]);
    array_push($nextPagesArray, $pagesArray[$matches + 2]);
    array_push($nextPagesArray, $pagesArray[$matches + 3]);

}

return $nextPagesArray;
}

1 个答案:

答案 0 :(得分:2)

如果你想让你的阵列绕过"可以这么说,您可以使用前三个元素扩展您的数组:

输入:

$pages=[6135,6139,6176,6178,6163,6152,6167,6183,6201,6190,6172,6197,6205,6154,6120];

方法(Demo):

$extended_pages=array_merge($pages,array_slice($pages,0,3));

if($x=array_search(6120,$pages)){
    $next3=array_slice($extended_pages,$x+1,3);
    var_export($next3);
}

输出:

array (
  0 => 6135,
  1 => 6139,
  2 => 6176,
)

这将节省您必须进行一系列条件检查,无论搜索中使用的页码如何,它都将起作用(当然,只要数组中存在页码)。