15

これは以前にもあったと思いますが、答えが見つかりませんでした。すでに回答されている場合は、リンクを使用して正しい方向に向けてください。

識別子の最初のレベルを削除したくない配列があります。これには機能があると思いますか?

例:

[0] => Array
        (
            [8] => Röd
        )

[1] => Array
        (
            [8] => Blå
        )

[2] => Array
        (
            [6] => Bobo
        )

[3] => Array
        (
            [8] => Grön
        )

[4] => Array
        (
            [7] => Sten
        )

[5] => Array
        (
            [8] => Vit
        )

[6] => Array
        (
            [7] => Guld
        )

[7] => Array
        (
            [6] => Lyxig
        )

したくないこと

[8] => Röd
[8] => Blå
[6] => Bobo
[8] => Grön
[7] => Sten
[8] => Vit
[7] => Guld
[6] => Lyxig
4

7 に答える 7

16

ここでの問題は、必要な識別子のキーを保持することです。同じキーを持つ名前文字列がいくつかあります (Blå と Röd など)。これらを配列に格納するか、鍵を紛失してもかまわない必要があります。

php5.3 の例:

$processed = array_map(function($a) {  return array_pop($a); }, $arr);

これにより、次のことが得られます。

[0] => Röd
[1] => Blå
[2] => Bobo
[3] => Grön
[4] => Sten
[5] => Vit
[6] => Guld
[7] => Lyxig

内部配列のキーはある種の ID であるため、保持する必要があることが明らかになりました。そうは言っても、単一の配列に同じキーを2つ持つことができるため、目的の最終構造を変更する必要があります。最も単純な構造は次のようになります。

[8] => Array
        (
            [0] => Röd,
            [1] => Blå,
            [2] => Vit,
            [3] => Grön
        )

[6] => Array
        (
            [0] => Bobo,
            [1] => Lyxig
        )

[7] => Array
        (
            [0] => Sten,
            [1] => Guld
        )

この構造を取得するには、単純なループが機能します。

$processed = array();
foreach($arr as $subarr) {
   foreach($subarr as $id => $value) {
      if(!isset($processed[$id])) {
         $processed[$id] = array();
      }

      $processed[$id][] = $value;
   }
}
于 2012-02-28T12:44:59.640 に答える
16

配列をsplat演算子でマージしてみてください:

   print_r(array_merge(...$array));
于 2017-12-11T13:15:53.973 に答える
6

PHP array_column

$new_array = array_column($old_array,0);

これにより、$old_array 内の各配列のインデックス 0 の値が取得されます。連想配列でも使用できます。

于 2016-09-27T18:13:29.570 に答える
2

使用する :

  public function remove_level($array) {
      $result = array();
      foreach ($array as $key => $value) {
        if (is_array($value)) {
          $result = array_merge($result, $value);
        }
      }
      return $result;
}

これは、元の配列と同じ順序で第 2 レベルの配列値を返します。または、array_walk を使用できます

   $results = array();
   array_walk($array, function($v, $k) use($key, &$val){
              array_merge($results, $v);
    });
于 2012-02-28T13:11:08.230 に答える
0
foreach($array as $key=>$val) { 
  $newarr[$val] = $array[$key][$val]; 
} 

未テスト!

于 2012-02-28T12:40:35.547 に答える
0

これをチェックしてくださいこれは期待される結果です

<?php
$arrData = array(
"5" => array
        (
            "8" => "Vit"
        ),

"6" => array
        (
            "7" => "Guld"
        )
);
foreach($arrData as $key=>$value):
    foreach($value as $k=>$v):
     $data[$k] = implode(',',$arrData[$key]);
    endforeach;
endforeach;


print_r($data);
?>
于 2012-02-28T12:48:30.190 に答える