PHP在PHP中左旋转数组

时间:2017-01-26 15:06:58

标签: php arrays

我试图在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
)

正如您所看到的,每次执行旋转时,它都会在其中引入一个空白区域,在打印数组时,它会显示为换行符。我有什么想法吗?

5 个答案:

答案 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);
}

https://eval.in/724912

答案 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);
    }
}