我有一个包含4个值的数组.我想删除第二个位置的值,然后将其余的键向下移一个.
$b = array(123,456,789,123);
Run Code Online (Sandbox Code Playgroud)
在第二个位置卸下钥匙之前:
数组([0] => 123 [1] => 456 [2] => 789 [3] => 123)
在我希望其余的键向下移动一个以填充缺失键的空间之后
数组([0] => 123 [1] => 789 [2] => 123)
我尝试在特定键上使用unset(),但它不会向下移动剩余的键.如何使用php删除数组中的特定键?
mic*_*usa 10
它表示您的输入数据是一个索引数组(从零开始的整数键序列中没有间隙)。我将比较直接从 OP 示例数据提供所需结果的明显技术。
unset()然后array_values()unset($b[1]);
$b = array_value($b);
Run Code Online (Sandbox Code Playgroud)
unset()可以接收多个参数,因此如果需要删除更多元素,则函数调用次数保持不变。例如unset($b[1], $b[3], $b[5]);unset()不能嵌套在其中array_values()形成单行,因为unset()修改变量并且不返回任何值。unset()使用动态白名单/黑名单键删除元素并不是特别方便。array_splice()array_splice($b, 1, 1);
// (input array, starting position, number of elements to remove)
Run Code Online (Sandbox Code Playgroud)
array_splice()可以删除单个元素,或者最多删除多个连续的元素元素。如果需要删除不连续的元素,则需要进行其他函数调用。array_splice()不需要array_values()调用,因为“输入中的数字键不会被保留”——在某些情况下这可能是需要的,也可能是不需要的。array_filter()嵌套在array_values()array_values(
array_filter(
$b,
function($k) {
return $k != 1;
},
ARRAY_FILTER_USE_KEY
)
)
Run Code Online (Sandbox Code Playgroud)
in_array()在自定义函数中使用带有白名单/黑名单键的调用,它会进一步降低效率。use().array_diff_key()嵌套在array_values()array_values(
array_diff_key(
$b,
[1 => '']
)
);
Run Code Online (Sandbox Code Playgroud)
array_diff_key()当存在白名单/黑名单键数组(可能有不同的元素计数)时,它真的很闪耀。PHP 处理按键的速度非常快,因此该函数在完成其设计任务时非常高效。array_diff_key()是完全不相关的——它们可以是nullor999或'eleventeen'——只考虑键。array_diff_key()与 相比,不存在任何范围界定挑战array_filter(),因为没有调用自定义函数。您需要array_values($b)重新键入数组,以便键是顺序和数字(从0开始).
以下应该做的伎俩:
$b = array(123,456,789,123);
unset($b[1]);
$b = array_values($b);
echo "<pre>"; print_r($b);
Run Code Online (Sandbox Code Playgroud)