【问题标题】:PHP array is having a gap when printed out打印输出时 PHP 数组有间隙
【发布时间】:2018-05-01 08:27:24
【问题描述】:

这是我的 2 个数组的输出:

代码1:

     print_r($arr);
     echo implode(" ", $arr) ."\n";

输出:

    Array
    (
        [0] => 1
        [1] => 2
    
        [2] => 3
    )
    1 2
     3

代码 2:

     print_r($arr);
     echo implode(" ", $arr) ."\n";

输出

    Array
    (
        [0] => 1
        [1] => 4
        [2] => 2
    
        [3] => 3
    )
    1 4 2
     3

为什么我的数组中有间隙?这发生在我在项目中进行了一些代码交换以对数字进行排序之后(特殊情况,无法排序($arr))。

编辑:我在两个数组上都做了var_dump($arr);,这是输出: 代码1:

    array(3) {
      [0]=>
      string(1) "1"
      [1]=>
      string(2) "2
    "
      [2]=>
      string(1) "3"
    }

代码 2:

    array(4) {
      [0]=>
      string(1) "1"
      [1]=>
      string(2) "2
    "
      [2]=>
      string(1) "3"
      [3]=>
      string(1) "4"
    }

完整代码:

标准输入文件中的内容

    3
    3
    3 1 2
    4
    1 3 4 2
    5
    1 2 3 5 4

代码:

    <?php
    $_fp = fopen("php://stdin", "r");
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    fscanf ($_fp, "%d", $testcases);
        
    for ($i = 0; $i < $testcases; $i++)
    {
        fscanf($_fp, "%d", $n);
        $arr = explode(" ", fgets($_fp));
        
            
        for ($j = 0; $j < ($n-1); $j++)
        {
            print_r($arr);
            if ($arr[$j] > $arr[$j+1])
            {            
                if ( isset($arr[$j-1]) )
                {
                    
                    
                    $loop = 0;
                    while($loop < 3)
                    {
                        $a = $arr[$j-1]; 
                        $b = $arr[$j]; 
                        $c = $arr[$j+1];
                        
                        $arr[$j-1] = $b;
                        $arr[$j] = $c;
                        $arr[$j+1] = $a;
                        
                        if ($arr[$j-1] <= $arr[$j] && $arr[$j] <= $arr[$j+1])
                        {
                            $possible = 1;
                            break;
                        }
                        $loop++;
                    }
                    
                }
                elseif ( isset($arr[$j+2]) )
                {
                    $loop = 0;
                    while($loop < 3)
                    {
                        $a = $arr[$j]; 
                        $b = $arr[$j+1]; 
                        $c = $arr[$j+2];
    
                        
                        $arr[$j] = $b;
                        $arr[$j+1] = $c;
                        $arr[$j+2] = $a;
                        
                        if ($arr[$j] <= $arr[$j+1] && $arr[$j+1] <= $arr[$j+2])
                        {
                            $possible = 1;
                            break;
                        }
                        $loop++;
                    }
                }
                
                
            }        
        }
        
        $possible = 0;
        
        print_r($arr);
        
        }
    
    
         ?>

【问题讨论】:

  • var_dump($arr[1]);我认为它包含换行符
  • @Toby,它出现在您问题中的代码之前。看看你如何初始化 [2] 个项目
  • 我们无法告诉您为什么您的数组元素中有一个换行符,除非您首先发布生成该数组的代码。跨度>
  • $arr = explode(" ", fgets($_fp));之后添加array_map('trim', $arr);

标签: php arrays


【解决方案1】:

你的数组第二个值有换行符

Demo

<?php

  $arr = array(1,'2'.PHP_EOL,3);
  print_r($arr);
  echo implode(" ", $arr);
?>

会产生:

Array
(
    [0] => 1
    [1] => 2

    [2] => 3
)
1 2
 3

--编辑--

解决方案:

$arr = array_map('trim', $arr);$arr = explode(" ", fgets($_fp)); 之后,因为当使用fgets() 读取文件时,它会在末尾包含换行符。使用trim(),您可以从字符串的开头和结尾去除空格(或其他字符),您可以使用rtrim(),从字符串的末尾去除空格(或其他字符)

【讨论】:

  • 感谢您提供的重要信息。但我不知道如何解决这个问题。我更新了我的问题,你能在我的代码中找出问题吗?
猜你喜欢
  • 2019-03-08
  • 2012-07-24
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
相关资源
最近更新 更多