这是我的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);
}
?>
答案 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()
从字符串的末尾去掉空格(或其他字符)