如何使用PHP数组裁剪所有值

Wil*_*low 0 php arrays substr

这是一个示例数组.值格式为HH:MM:SS

$array = ['17:31:05', '17:31:06', '17:31:07' ...etc...];
Run Code Online (Sandbox Code Playgroud)

我需要做的是从$ array中的所有值之前删除秒和冒号.我的尝试是做以下事情,但它没有奏效.

foreach($array as $key => $val){
    $val = substr($val, 0, -3);
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

mpa*_*tel 6

在您的问题示例代码中您修改$val而不是$array.

而是修改$array:

foreach($array as $key => $val){
    $array[$key] = substr($val, 0, -3);
}
Run Code Online (Sandbox Code Playgroud)

要么

foreach($array as &$val){
    $val = substr($val, 0, -3);
}
unset($val); # remove the reference on $val - recommended child protection
Run Code Online (Sandbox Code Playgroud)

我推荐第一个,因为参考变量有些容易出错(更难理解).


hak*_*kre 5

您的代码并不太远,您只需将它以错误的方式放在阵列上.请看以下不同的示例:

$removeSeconds = function($val) {
    return substr($val, 0, -3);
}

$arrayWithoutSeconds = array_map($removeSeconds, $array);
Run Code Online (Sandbox Code Playgroud)

(匿名)函数基本上包含您的代码,然后使用该array_map函数将该函数映射到数组.

如果你更喜欢使用foreach它也是可能的,但是如果你想$val在你的情况下写入,它必须是对数组内部值的引用,这并不总是直截了当.

对于数组(不是引用且不包含任何引用作为"值"),它的工作原理如下:

foreach ($array as &$val) {
               ### ^-- iterate over a reference (PHP variable alias)
    $val = substr($val, 0, -3);
}
unset ($val); ### remove the reference (it does not unset the last array element!)
Run Code Online (Sandbox Code Playgroud)

即使是unsetforeach技术上没有必要之后的操作,也建议您$val以后不能在代码中设置(然后更改数组的最后一个值).

这就是为什么通常更简单地迭代键和值,然后直接写入特定元素:

foreach ($array as $key => $val) {
    $array[$key] = substr($val, 0, -3);
}
Run Code Online (Sandbox Code Playgroud)

正如您可以看到的所有这些不同情况一样,您可以使用(匿名)函数作为顶部,因此首先使用它可以避免更改大多数代码.你在这里也有一个共同的映射情况,所以我认为它最适用.然而,这可能会有所不同,因此请保持开放的态度,并在具体情况下使用您认为最合适的内容.