9

array_chunkチャンク サイズを使用してカットを作成し、配列を複数の配列に分割します。

値の配列の配列があり、1 つの大きな値の配列だけが必要な場合はどうすればよいでしょうか?

を使用することもできますarray_mergeが、そのためにはすべてのサブ配列を列挙する必要があり、その中に可変数がある可能性があります。

今のところ、私の解決策は次のとおりです。

foreach($input as $tmp) {foreach($tmp as $val) {
    ...
}}

しかし、それはちょっと厄介で、値を使用したいという理由だけで機能します。配列をどこかに保存したい場合はどうすればよいですか?

編集: 入力は<select multiple>、複数のカテゴリからアイテムを選択するために使用されるボックスのセットから来ています。各アイテムには (アイテム間で) グローバルに一意の ID があるため、入力を 1 つの配列に結合して実行したいだけです。

入力は次のようになります。

[[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]
4

5 に答える 5

5

array_reducePHP には配列をフラット化するメソッドが組み込まれていませんが、 と を使用して同じことを実現できますarray_merge。このような:

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

これは の逆操作として機能するはずarray_chunkです。

于 2017-02-26T10:23:50.103 に答える
4

以下の PHP ドキュメントから抜粋array_values:

/** 
 * 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 には、配列をフラット化するためのネイティブ メソッドがありません。

于 2012-05-15T12:18:35.400 に答える
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
)
于 2012-05-15T12:26:30.610 に答える