1

私は次のようなPHP配列を持っています:

$array['my_data']['value'] = 'some value';
$array['my_own_data']['value'] = 'another value';
$array['different_data']['value'] = 'another value';

PHPなどでarray_mergeを使用する必要があります。問題は、第1レベルのキーの数が不明であるということです。150アイテムかもしれませんが、わかりません。

キーの数が不明なため、これは機能しません。

array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);

ループが必要ですか、それとも何か凝ったものがありますか?

4

6 に答える 6

5

それがあなたが望むものであるならば、これはそうするかもしれません:

$array = array_map('current', $array);

またはおそらく

$array = array_map(function ($a) { return $a['value']; }, $array);

これはあなたに与えるはずです

array('some value', 'another value', 'another value')
于 2011-07-19T13:08:45.750 に答える
2

問題は、第1レベルのキーの数が不明であるということです。150アイテムかもしれませんが、わかりません。

それは簡単に解決できる問題です。

最初のレベルのキーの数を知りたい場合:

$numberOfKeysOfTheFirstLevel = count($array);

そこにあなたは今数を知っています。実際に名前が必要な場合は、次のようにすることもできます。

$keyNamesOfTheFirstLevel = array_keys($array);

それであなたはあなたの質問を続けました:

キーの数が不明なため、これは機能しません。 array_merge($array['my_data'], $array['my_own_data'], $array['different_data']);

array_merge良いニュースは、操作を実行するためにキーの数を知る必要がないことです。

call_user_func_array('array_merge', $array);

それで、あなたがあなたの質問で書いたことに関して、これはそれに答えるはずです。ただし、結果は期待したものではない可能性があります。他の回答もご覧ください。お問い合わせください

于 2011-07-19T14:10:26.530 に答える
1

これを試してください:

$new_array = array();
foreach($array as $item) {
  $new_array[] = $item['value'];
};
于 2011-07-19T13:09:18.940 に答える
1
// 1. your array should have different keys, otherwise it will have no effect
$array['my_data']['value1'] = 'some value';
$array['my_own_data']['value2'] = 'another value';
$array['different_data']['value3'] = 'another value';

$result = call_user_func_array('array_merge', $array);

戻ります

array(
  'value1' => 'some value', 
  'value2' => 'another value', 
  'value3' => 'another value', 
)

そうでなければ、あなたはこのようなものが欲しかったですか?

array(
  'value' => array('some value', 'another value', 'another value')
)

その後、あなたはすることができます

$array['my_data']['value'] = 'some value';
$array['my_own_data']['value'] = 'another value';
$array['different_data']['value'] = 'another value';

$result = array();
// PHP <= 5.2
array_walk($array, create_function('&$item, $key, &$dest', '
    foreach ((array) $item as $subKey => $value) {
        if (!isset($dest[$subKey])) { $dest[$subKey] = array(); }
        $dest[$subKey][] = $value;
    }
'), & $result);
var_export($result);
于 2011-07-19T14:26:28.093 に答える
0
array_map(function($a){
    return $a['value'];
},$array);

php5.2以前の場合:

function stuff($a){
    return $a['value'];
}
array_map('stuff',$array);
于 2011-07-19T13:10:37.923 に答える
0

私があなたが欲しいものを理解しているなら、あなたは使うことができますarray_map

変更するには:

$a = array();
$a['x']['value'] = 1;
$a['y']['value'] = 3;
$a['z']['value'] = 3;

の中へ:

array(3) {
 ["x"]=>
 int(1)
 ["y"]=>
 int(2)
 ["z"]=>
 int(3)
}

次の関数を定義できます。

function f($x) { return $x['value'];}

と使用array_map

$b = array_map(f, $a);
于 2011-07-19T13:15:54.687 に答える