【问题标题】:Array_reverse "again"Array_reverse “再次”
【发布时间】:2018-02-13 11:30:17
【问题描述】:

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

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

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

非常感谢提前!!

【问题讨论】:

  • 不要发布文字图片,尤其是当文字是代码时。
  • 阅读array_reverse()。它不会更改输入数组,而是返回一个新数组。您的第二次尝试没有任何操作。
  • 您的指示已被执行。
  • 你发布了一些代码,中间有一段文字(看起来像是翻译的复制粘贴)。 “代码”显然无法编译,因为它发布在此处。而且,最重要的部分,你没有解释你想要实现什么。
  • 这不是翻译者的复制/粘贴,是我自己的话。我将尝试更好地解释。

标签: php arrays array-reverse


【解决方案1】:

您实际上并没有反转数组。第一个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 ]))

【讨论】:

    【解决方案2】:

    如果要删除尾随零

    // 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

    【讨论】:

      猜你喜欢
      • 2018-10-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 2017-06-05
      • 2018-05-13
      相关资源
      最近更新 更多