为什么我的PHP数组有差距

时间:2017-11-17 14:17:32

标签: php arrays

这是我的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"
}

FUll代码:

stdin文件中的内容

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);

    }


     ?>

1 个答案:

答案 0 :(得分:4)

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

请参阅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()从字符串的末尾去掉空格(或其他字符)