0

所以,à 要做的是尝试显示数组的第 3 个元素。总是 3。但是,并不总是至少有 3 个元素。

所以,我所做的是使用 if :

<?php for ($i = 0; $i <= 2; $i++) { ?>
  <?php if($post["Project"]["Post"][$i]){ ?>
    ...
  <?php } ?>
<?php } ?>

但是,当至少没有 3 个条目时,我一直有“未定义的偏移量”错误。有解决方案的人吗?

4

7 回答 7

3
foreach (array_slice($array, 0, 3) as $item) {
    echo $item;
    ...
}

或者:

$i = 1;
foreach ($array as $item) {
    ...

    if ($i++ >= 3) {
        break;
    }
}

foreach迭代数组总是更可取,正是因为您无法访问任何不存在的东西。

于 2012-09-21T14:15:42.730 回答
1

尝试以下操作:

<?php for ($i = 0; $i <= 2; $i++) {
   if(isset($post["Project"]["Post"][$i])){ ?>
   ...
<?php }} ?>
于 2012-09-21T14:14:00.417 回答
1

用于isset()检查密钥是否存在。

<?php if(isset($post["Project"]["Post"][$i])){ ?>

或者你可以使用:

$posts = $post["Project"]["Post"];
foreach ($posts as $i => $post) {
   //...
   if ($i === 2) break;
}
于 2012-09-21T14:14:06.720 回答
0

将其更改为if (isset($post ...

或者:

foreach (array_slice($post["Project"]["Post"], 0, 3)) { ...
于 2012-09-21T14:14:23.347 回答
0
 <?php for ($i = 0; $i <= 2; $i++) { 
  if( isset($post["Project"]["Post"][$i] )){ 
  ...
 } 
}   ?>

您不需要<?php...?>为每一行添加标签。

于 2012-09-21T14:14:28.410 回答
0

试试ifset。

<?php for ($i = 0; $i <= 2; $i++) { ?>
  <?php if(isset($post["Project"]["Post"][$i])){ ?>
    ...
  <?php } ?>
<?php } ?>

或者,先进行计数也可能是一种方法。

于 2012-09-21T14:14:48.580 回答
0

之前计算,首先满足哪个条件(数组的实际大小或最大数量 - 在您的情况下为 3),然后遍历这些元素:

$min = min( 3, count( $post["Project"]["Post"] ) );
for ($i = 0; $i < $min; $i++) {
 if($post["Project"]["Post"][$i]){
    ...
 }
}
于 2012-09-21T14:15:06.140 回答