array_chunk
使用块大小将数组拆分为多个数组以进行剪切。
如果我有一个值数组数组,我只想要一个大数组值?
我可以使用array_merge
,但这需要我枚举所有子数组,其中可能有一个可变数字。
目前,我的解决方案是:
foreach($input as $tmp) {foreach($tmp as $val) {
...
}}
但这有点混乱,只能运作,因为我想使用价值观。如果我想将数组存储在某个地方怎么办?
编辑:输入来自一组<select multiple>
框,用于从多个类别中选择项目。每个项目都有一个全局唯一的(在项目中)ID,所以我只想将输入组合成一个数组并运行它。
输入可能如下所示:
[[4,39,110],[9,54,854,3312,66950],[3]]
预期产出:
[4,39,110,9,54,854,3312,66950,3]
或:
[3,4,9,29,54,110,854,3312,66950]
答案 0 :(得分:4)
取自array_values
上的PHP文档:
/**
* Flattens an array, or returns FALSE on fail.
*/
function array_flatten($array) {
if (!is_array($array)) {
return FALSE;
}
$result = array();
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, array_flatten($value));
}
else {
$result[$key] = $value;
}
}
return $result;
}
PHP没有本地方法来展平数组..所以你去。
答案 1 :(得分:4)
虽然PHP没有内置方法来展平数组,但您可以使用array_reduce
和array_merge
来实现相同的功能。像这样:
$newArray = array_reduce($array, function ($carry, $item) {
return array_merge($carry, $item);
}, []);
这应该作为array_chunk
的反向操作。
答案 2 :(得分:3)
代码:
$array = [[4,39,110], [9,54,854,3312,66950], [3]];
$array = call_user_func_array('array_merge', $array);
print_r($array);
结果:
Array
(
[0] => 4
[1] => 39
[2] => 110
[3] => 9
[4] => 54
[5] => 854
[6] => 3312
[7] => 66950
[8] => 3
)
答案 3 :(得分:2)
很抱歉,如果我错了,但是如果我们在多个选择组中使用相同的名称,那么它将生成一个预期的数组。
<?php
echo '<pre>';
print_r($_POST['cat']);
?>
<form method="post">
<select name="cat[]" multiple="multiple">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<select name="cat[]" multiple="multiple">
<option value="22">2</option>
<option value="33">3</option>
</select>
<select name="cat[]" multiple="multiple">
<option value="111">111</option>
<option value="222">222</option>
<option value="333">333</option>
<option value="444">444</option>
</select>
<input name="" type="submit" />
</form>
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 22
[5] => 33
[6] => 222
)
答案 4 :(得分:1)
在这种情况下(https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list),将数组变成参数列表的“ ...”运算符非常方便。
array_chunk()
的反函数可能是这样:
array_merge(...$chunks);
示例:
print_r(array_merge(...[[0,1,2],[3,4,5]]));
输出:
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)