Array_reverse "again"
Array_reverse "again"
这是我的第一个post,所以请indulgent/lenient。
这个数组是刺绣程序的步骤枚举
而且我必须在非空步骤之间保持“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] -> fill a new array with values starting from the first key with not null value to the last key
Edit : Here was my error
$sequencesFromEnd[] = array_slice($arrayReversed,$key,$lastKey);
I have it corrected with this code :
$sequencesFromEnd = array_slice($arrayReversed,$key,$lastKey);
break;
}
$key++;
}
编辑:然后它像我预期的那样工作!
然后我想反转"again"具有值的数组,以便按正确的顺序执行步骤,此代码是不工作:
//First try
$stepsInRightOrder = array_reverse($sequencesFromEnd);
// Second try
//array_reverse($stepsInRightOrder);
Second try commented because it is a no-op.
不幸的是,数组在 "foreach" 循环中保持原样 ...
非常感谢!!
你其实不是在反转数组。第一个 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]))
如果您想删除尾随零
// 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);
这是我的第一个post,所以请indulgent/lenient。
这个数组是刺绣程序的步骤枚举
而且我必须在非空步骤之间保持“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] -> fill a new array with values starting from the first key with not null value to the last key Edit : Here was my error
$sequencesFromEnd[] = array_slice($arrayReversed,$key,$lastKey);
I have it corrected with this code :
$sequencesFromEnd = array_slice($arrayReversed,$key,$lastKey);
break;
}
$key++;
}
编辑:然后它像我预期的那样工作!
然后我想反转"again"具有值的数组,以便按正确的顺序执行步骤,此代码是不工作:
//First try
$stepsInRightOrder = array_reverse($sequencesFromEnd);
// Second try
//array_reverse($stepsInRightOrder);
Second try commented because it is a no-op.
不幸的是,数组在 "foreach" 循环中保持原样 ...
非常感谢!!
你其实不是在反转数组。第一个 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]))
如果您想删除尾随零
// 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);