我正在使用一些参数编写SQL查询创建者。在Java中,只需通过数组长度检查当前数组位置,就可以很容易地从for循环中检测数组的最后一个元素。

for(int i=0; i< arr.length;i++){
     boolean isLastElem = i== (arr.length -1) ? true : false;        
}

在PHP中,它们有访问数组的非整数索引。因此必须使用foreach循环遍历数组。当您需要做出某些决定时(在我的例子中,在构建查询时附加或/和参数),这就会出现问题。

我相信一定有某种标准的方法来做这件事。

PHP中如何解决这个问题?


当前回答

因为你寻找EOF数组的意图只是为了粘合。请了解下面的策略。你不需要EOF:

$given_array = array('column1'=>'value1',
                     'column2'=>'value2',
                     'column3'=>'value3');

$glue = '';
foreach($given_array as $column_name=>$value){
    $where .= " $glue $column_name = $value"; //appending the glue
    $glue   = 'AND';
}
echo $where;

o/p:

column1 = value1 AND column2 = value2 AND column3 = value3

其他回答

您可以执行count()。

for ($i=0;$i<count(arr);$i++){
    $i == count(arr)-1 ? true : false;
}

或者如果你只寻找最后一个元素,你可以使用end()。

end(arr);

只返回最后一个元素。

而且,你可以用整数来索引php数组。它完全满意

arr[1];

从foreach数组中获取第一个和最后一个元素

foreach($array as $value) {
    if ($value === reset($array)) {
        echo 'FIRST ELEMENT!';
    }

    if ($value === end($array)) {
        echo 'LAST ITEM!';
    }
}

一种方法是检测迭代器是否有next。如果迭代器没有附加next,则意味着你在最后一个循环中。

foreach ($some_array as $element) {
    if(!next($some_array)) {
         // This is the last $element
    }
}

如果我明白你的意思,那么你所需要的就是反转数组,并通过pop命令获取最后一个元素:

   $rev_array = array_reverse($array);

   echo array_pop($rev_array);
<?php foreach($have_comments as $key => $page_comment): ?>
    <?php echo $page_comment;?>
    <?php if($key+1<count($have_comments)): ?> 
        <?php echo ', '; ?>
    <?php endif;?>
<?php endforeach;?>