Php 数组的对立面

Php 数组的对立面,php,arrays,Php,Arrays,array\u chunk使用块大小将数组拆分为多个数组以进行剪切 如果我有一个数组的值,我只想要一个大数组的值呢 我可以使用array\u merge,但这需要我枚举所有子数组,其中可能有一个变量 目前,我的解决方案是: foreach($input as $tmp) {foreach($tmp as $val) { ... }} 但这有点混乱,只因为我想使用这些值才起作用。如果我想把阵列存储在某个地方呢 编辑:输入来自一组框,用于从多个类别中选择项目。每个项目都有一个全局唯一的(项

array\u chunk
使用块大小将数组拆分为多个数组以进行剪切

如果我有一个数组的值,我只想要一个大数组的值呢

我可以使用
array\u merge
,但这需要我枚举所有子数组,其中可能有一个变量

目前,我的解决方案是:

foreach($input as $tmp) {foreach($tmp as $val) {
    ...
}}
但这有点混乱,只因为我想使用这些值才起作用。如果我想把阵列存储在某个地方呢

编辑:输入来自一组
框,用于从多个类别中选择项目。每个项目都有一个全局唯一的(项目之间的)ID,所以我只想将输入合并到一个数组中并运行它

输入可能如下所示:

[[4,39,110],[9,54,854,3312,66950],[3]]
预期产出:

[4,39,110,9,54,854,3312,66950,3]
或:


摘自关于
数组\u值的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没有用于展平数组的本机方法。。好了。

如果我错了,很抱歉,但是如果我们在多个选择组中使用相同的名称,那么它将生成预期的数组

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

虽然PHP没有内置的方法来展平数组,但是可以使用
array\u reduce
array\u merge
实现同样的效果。像这样:

$array = [[4,39,110], [9,54,854,3312,66950], [3]];
$array = call_user_func_array('array_merge', $array);

print_r($array);
这应该作为对
array\u chunk

代码的反向操作:

Array
(
    [0] => 4
    [1] => 39
    [2] => 110
    [3] => 9
    [4] => 54
    [5] => 854
    [6] => 3312
    [7] => 66950
    [8] => 3
)
结果:

array_merge(...$chunks);
在本例中,“…”运算符可以非常方便地将数组转换为参数列表()

array\u chunk()
的反义词可能是:

print_r(array_merge(...[[0,1,2],[3,4,5]]));
例如:

Array
(
   [0] => 0
   [1] => 1
   [2] => 2
   [3] => 3
   [4] => 4
   [5] => 5
)
输出:

$newArray = array_reduce($array, function ($carry, $item) {
    return array_merge($carry, $item);
}, []);

你能给出输入和预期输出的具体例子吗?@mihaiorga I just
json\u decode
d it;)我将用一个例子来编辑。您在“选择多个”中使用的字段名是什么?嗯。。。答案很好,但我想我最好还是保留我正在做的事情,至少现在是这样。他的答案和你的一样有效,只需要多一点文本,它就可以进行多级数组。但是请注意,它将覆盖重复的键(请参见),因为这是有效的,是的,但是如果我随后必须循环通过结果来进行处理,这是不值得的。这回答了这个问题,因为它是一个很好的折叠数组的解决方案,但是如果在那里使用它,它只是开销。PHP还允许以下语法:
$newArray=array\u reduce($array,'array\u merge',[])此建议已经存在:并且是没有任何复杂性的最佳单行程序。这应该是公认的答案。问题是:1。这是一个只有低值代码的答案和2。这个建议已经是老生常谈了。这是老消息:事实上,这将避免额外的服务器端处理。如果不需要知道id来自哪个类别/选择,这是最明智的选择@NietNitpicking:如果选项“value”与选项文本相同,则无需声明该选项。
print_r(array_merge(...[[0,1,2],[3,4,5]]));
Array
(
   [0] => 0
   [1] => 1
   [2] => 2
   [3] => 3
   [4] => 4
   [5] => 5
)