3

多次元配列を変換するためのベストプラクティスはどれですか

Array ( [0] => Array ( [id] => 11 ) [1] => Array ( [id] => 14 ) )

単純な配列に?編集:「フラット化された」配列(正しい単語をありがとうarxanas)

Array ( [0] => 11 [1] => 14 )

いくつかの例を見ましたが、foreachループ、内破、または大きな関数以外にもっと簡単な方法はありますか?確かに、これを処理するphp関数が必要です。か否か..?

4

4 に答える 4

3
$array = array();
$newArray = array();

foreach ( $array as $key => $val )
{
    $temp = array_values($val);
    $newArray[] = $temp[0];
}

ここで実際に見てください:http://viper-7.com/sWfSbD


ここに関数形式であります:

function array_flatten ( $array )
{
    $out = array();

    foreach ( $array as $key => $val )
    {
        $temp = array_values($val);
        $out[] = $temp[0];
    }

    return $out;
}

ここで実際に見てください:http://viper-7.com/psvYNO

于 2012-08-20T01:56:42.740 に答える
1

多次元配列であってはならない(同じキーと値を持つ)多次元配列があり、次元の深さが複数ある場合は、再帰を使用してループし、各項目を新しい配列に追加できます。頭痛がしないように注意してください:)

于 2012-08-20T01:55:17.533 に答える
1

array_walk_recursiveを使用して配列を平坦化できます。

$ret = array(); 
array_walk_recursive($arr, function($var) use (&$ret) { 
  $ret[] = $var; 
}); 
var_dump($ret); 
于 2012-08-20T02:24:30.743 に答える
0

これが例です。(おそらく xdazz ほど「エレガント」ではありませんが、「use」クロージャーを使用しない代替手段です。)これは、配列が次のように始まる方法です。

始める

array (size=2)
  0 => 
    array (size=1)
      'woeid' => string '56413072' (length=8)
  1 => 
    array (size=1)
      'woeid' => string '56412936' (length=8)      

次に、次のようなものが必要になる場合があります。

目標

   array (size=2)
      0 => string '56413072' (length=8)
      1 => string '56412936' (length=8)

array_walk_recursiveを使用できます

コード

$woeid = array();
array_walk_recursive($result['results']['Result'], function ($item, $key, $woeid) {
     if ($key == 'woeid') {                                       
           $woeid[] = $item;
     }
}, &$woeid);
于 2013-01-31T10:23:23.130 に答える