数字キーを持つ 2 つの配列があります。これは小さな例です:
$test_a = array(1 => 'one', 2 => '二');
$test_b = array(2 => 'two', 4 => 'four');
それらを とマージして、配列array_merge()
を受け取りたい:$test_c
$test_c = array(
1 => 'one',
2 => 'two',
4 => 'four'
);
のマニュアルには、次のことがarray_merge
記載されています。
数値キーを持つ入力配列の値は、結果配列のゼロから始まるインクリメント キーで再番号付けされます。
これは本当のようです:
$test_c = array_merge($test_a, $test_b);
var_dump($test_c);
戻り値:
array (size=4)
0 => string 'one' (length=3)
1 => string '二' (length=3)
2 => string 'two' (length=3)
3 => string 'four' (length=4)
私は何を試しましたか:
キーを文字列としてキャストしてみました:
foreach($test_a as $key => $value) $test_a[(string)($key)] = $value;
...キーはまだ数字です。
私は試しました
strval()
:foreach($test_a as $key => $value) $test_a[strval($key)] = $value;
変化なし。キーはまだ数字です。
私はこのトリックで試しました:
foreach($test_a as $key => $value) $test_a['' . $key . ''] = $value;
どちらも機能しません。キーはまだ数字です。
驚いたのは、配列キーに文字列から数値への自動変換のようなものがあることを知ったときです。これにより、キーが文字列に変更されました。
foreach($test_a as $key => $value) $test_a[' ' . $key . ' '] = $value;
そして私が追加したときtrim()
:
foreach($test_a as $key => $value) $test_a[trim(' ' . $key . ' ')] = $value;
キーは数値に変換されました。
基本的に、これら 2 つの配列をマージしたいと考えています。唯一の解決策は、キーを数値から文字列データ型に変換する方法を見つけることだと思います。
「自動変換」のことをさらに説明していただければ、私は完全に満足します。