-1

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

该数组是一个刺绣程序的步骤枚举

而且我必须在非空步骤之间保持“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”循环中实现的那样......

非常感谢提前!

4

2 回答 2

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个元素放入一个新数组中,这意味着你实际上有一个数组在一个数组中,然后 break 离开 foreach 循环,因此该数组将仅包含一个数组,然后您将其反转,但由于它仅包含一个数组,因此向后相同:

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

您只需反转包含 1 个元素的外部数组。

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

于 2018-02-13T14:15:00.717 回答
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);

演示

于 2018-02-13T14:34:31.627 回答