2017-09-25 142 views
0

我试图用for循环填充数组。这样做是为了获得某本书的页数。但是在执行代码时,它会跳过数组中的第一个对象。谁能告诉我为什么? (我认为这是因为$ I从1开始,而不是0,但似乎并没有改变任何东西)PHP For循环跳过第一个结果

if(!empty($article['finishing'])){ 
    $numPages = $article['copies']; 
    $arrayIndexNumber = []; 

    for($i=1; $i <= $numPages; $i++){ 
     $arrayIndexNumber[] = $i; 
    } 

    if(count($arrayIndexNumber) >= 1){ 

     if(count($arrayIndexNumber) == 1){ 
      $output['attributes']['EFPageRange'] = 1; 
      $print_jobs[$article['id']][] = $output; 
     } 

     if(count($arrayIndexNumber) > 1){ 
      $comma_separated1 = implode(", ", ['1', $article['copies']]); 
      $output['attributes']['EFPageRange'] = $comma_separated1; 
      $print_jobs[$article['id']][] = $output; 
     } 

     array_shift($arrayIndexNumber); 
     array_pop($arrayIndexNumber); 
     $comma_separated2 = implode(", ", $arrayIndexNumber); 
     $output['attributes']['EFPageRange'] = $comma_separated2; 

     if(count($arrayIndexNumber) >= 2){ 
      $print_jobs[$article['id']][] = $output; 
     } 
    } 
    $article['file_url'] = 'i has finishing'; 
    $output['attributes']['username'] = $article['file_url']; 
} 

上面的代码输出:的

[0] => Array 
    (
     [attributes] => Array 
      (
       [title] => 277569 
       [EFPrintSize] => a4 
       [num copies] => 1 
       [num pages] => 119 
       [EFPCName] => 80 
       [EFDuplex] => TopTop 
       [EFPageRange] => 1, 119 
     ) 

) 

代替:

[0] => Array 
    (
     [attributes] => Array 
      (
       [title] => 277564 
       [EFPrintSize] => a4 
       [num copies] => 1 
       [num pages] => 45 
       [EFPCName] => 80 
       [EFDuplex] => false 
       [EFPageRange] => 1, 45 
       [username] => i has finishing 
       [EFColorMode] => Grayscale 
     ) 

) 

回答

-1

php数组索引从零开始计数

for($i=1; $i <= $numPages; $i++) 
     ^^^ 

将其更改为$i=0

+0

通过这样做,我的“PageRange”属性将不再匹配 – Dannylycka

+0

我刚刚告诉你哪里做错了。如果正常的迭代不起作用,并打破了代码的其余部分,则应该修复那些破坏正常逻辑流程的部分。不要打我,不要打php的内部逻辑 - 只是去错误的逻辑根据错误的假设修复 - )) – marmeladze

+0

只是因为indizies从零开始,并不意味着每个使用数组的循环都需要从零开始。 –

1

你的第一个数组元素,因为array_shift的删除:

array_shift($arrayIndexNumber); 

array_shift

array_shift - 将一个元素关闭 数组的开头

调试您的代码:

for($i=1; $i <= $numPages; $i++){ 
    $arrayIndexNumber[] = $i; 
} 
echo '<pre>'; 
print_r($arrayIndexNumber); // Check what the array returns 
+0

即使它已经执行$ print_jobs [$ article ['id']] [] = $ output; ? – Dannylycka

+0

问题到底是什么?上面提到的部分没有执行? –

+0

在第一个输出上跳过[用户名] – Dannylycka