Array_reverse“再次”

时间:2018-02-13 11:30:18

标签: php arrays array-reverse

这是我的第一篇文章,所以请放纵/宽容。

此阵列是刺绣程序的步骤枚举

我必须在非空步骤之间保持“0”值,并且在

之后不要取空值
$oldArray = Array
("1278","1297","1278","1000","0","1000","1212","1001","1212","1278","1000",
"0","1297","1001","1000","0","1001","1278","1000","1001","1001","1278", 
"0","1000","1001","0","0","0","0","0","0","0","0","0","0",
"0","0","0","0","0","0","0","0","0","0","0","0","0","0"
);

我第一次反转它并找到第一个非空值:

$arrayReversed = array_reverse($oldArray);  

$lastKey = 48;

foreach ($arrayReversed as $key => $value) {
    # If the value is not empty 
    if (!empty($value)) {
  

[FR] - > remplir un nouveau tableau avec les valeurs en partant de l'index“$ key”jusqu'a“$ lastKey”

     

[ENG] - >填充一个新数组,其值从第一个键开始,非空值到最后一个键   编辑:这是我的错误

        $sequencesFromEnd[] = array_slice($arrayReversed,$key,$lastKey);
  

我已使用此代码更正:

        $sequencesFromEnd = array_slice($arrayReversed,$key,$lastKey);
        break;

    }
    $key++;
}

编辑:然后它就像我预期的那样工作!

然后我想再次反向“数值为的数组,以便按正确的顺序执行步骤,且此代码无效:

//First try

$stepsInRightOrder = array_reverse($sequencesFromEnd);

// Second try

//array_reverse($stepsInRightOrder);
  

第二次尝试评论,因为它是一个无操作。

不幸的是,数组在“foreach”循环中保持实现 ...

非常感谢提前!!

2 个答案:

答案 0 :(得分:0)

你实际上并没有倒转阵列。第一个array_reverse将数组反转为

0-> 1278
1-> 1297
2-> 1278
3-> 1000 etc...

在第一个array_reverse $ arrayReverse包含

之后
etc...
0-> 1000
1-> 1278
2-> 1297
3-> 1278

请注意,只有数组中的值被反转,因为您没有明确保留键。然后你经历一个foreach循环,如果值不为空,你将一个新的数组,从当前键到key + 48元素放入一个新数组,这意味着你实际上有一个数组在一个数组中,然后打破离开foreach循环,所以数组将只包含一个数组,然后你反转,但由于它只包含一个数组,它反向相同:

0-> etc...
    0-> 1000
    1-> 1278
    2-> 1297
    3-> 1278

你只能反转外部数组,它包含1个元素。

(有点不清楚......所以$ sequencesFromEnd []实际上将一个数组添加到一个新数组中。你可能只想使用$ sequencesFromEnd = array_slice(...)或array_reverse($ sequencesFromEnd [$ some_key ]))

答案 1 :(得分:0)

如果要删除尾随零

// Find the last not zero value 
$lastkey = count($oldArray)-1;
while($lastkey and ! $oldArray[$lastkey ]) --$lastkey;
// Slice array
$stepsInRightOrder = array_slice($oldArray, 0, $lastkey+1);
print_r($stepsInRightOrder);

demo