我试图在PHP中旋转一个数组2次。它工作正常,但阵列中有一个空白空间,原因不明。这是我的代码:
$a_temp = fgets($handle);
$a = explode(" ",$a_temp);
for($i = 0; $i < 2; $i++){
print_r($a);
array_unshift($a, array_pop($a));
print_r($a);
}
该文件包含以下内容:
1 2 3
现在我得到的输出是:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 3
[1] => 1
[2] => 2
)
Array
(
[0] => 3
[1] => 1
[2] => 2
)
Array
(
[0] => 2
[1] => 3
[2] => 1
)
正如您所看到的,每次执行旋转时,它都会在其中引入一个空白区域,在打印数组时,它会显示为换行符。我有什么想法吗?
答案 0 :(得分:3)
正如@cHao ans @Kulvar所指出的,你的“3”元素实际上是“3 \ n”,因为fgets
返回的行以\n
结束,这是正常的。
将$a = explode(" ",$a_temp);
替换为$a = explode(" ",trim($a_temp));
并修复。适用于任何字符串,数字与否
答案 1 :(得分:1)
似乎你有一个非整数值。使用array_map()
将所有值强制转换为整数。
$a_temp = fgets($handle);
$a = explode(" ",$a_temp);
$a = array_map("intval", $a); //Cast all values to integers
for($i = 0; $i < 2; $i++){
print_r($a);
array_unshift($a, array_pop($a));
print_r($a);
}
答案 2 :(得分:1)
结合array_push()
和array_shift()
功能。在此解决方案中,您必须输入多个旋转,或者将for循环中的$k
变量更改为所需的旋转量。
for($i=0; $i<$k; $i++){
//remove first element
$firstElement = array_shift($a);
//push first element to the end
array_push($a, $firstElement);
}
echo implode(" ", $a);
答案 3 :(得分:0)
第一种方法是优化代码。但是其他两个是解决方案,但没有像第一个那样优化。
function rotate_left_method_1( $a, $d ) {
$first = array_slice( $a, 0, $d );
$second = array_slice( $a, $d, null );
return array_merge( $second, $first );
}
function rotate_left_method_2( $a, $d ) {
$swap = 1;
foreach ( $a as $v ) {
if ( $d >= $swap ) {
array_shift( $a );
array_push( $a, $v );
$swap ++;
}
}
return $a;
}
function rotate_left_method_3( $a, $d ) {
if ( is_array( $a ) ) {
for ( $swap = 0; $swap < $d; $swap ++ ) {
$temp = $a[0];
array_shift( $a );
array_push( $a, $temp );
}
}
return $a;
}
var_dump( rotate_left_method_1( array( 1, 2, 3, 4, 5 ), 4 ) );
var_dump( rotate_left_method_2( array( 1, 2, 3, 4, 5 ), 4 ) );
var_dump( rotate_left_method_3( array( 1, 2, 3, 4, 5 ), 4 ) );
答案 4 :(得分:0)
int count = 0;
while (shuffle != b) {
count++;
cout << "You're incorrect!\n";
cout << "type in a number from (1 - 10)\n";
cin >> b;
if (count == 2) {
cout << "Game Over" << endl;
exit(0);
}
}