2

数字キーを持つ 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)

私は何を試しましたか:

  1. キーを文字列としてキャストしてみました:

    foreach($test_a as $key => $value) $test_a[(string)($key)] = $value;
    

    ...キーはまだ数字です。

  2. 私は試しましたstrval()

    foreach($test_a as $key => $value) $test_a[strval($key)] = $value;
    

    変化なし。キーはまだ数字です。

  3. 私はこのトリックで試しました:

    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 つの配列をマージしたいと考えています。唯一の解決策は、キーを数値から文字列データ型に変換する方法を見つけることだと思います。
「自動変換」のことをさらに説明していただければ、私は完全に満足します。

4

2 に答える 2

3

+次のように、両方の配列で演算子を使用できます。

$test_a = array(1 => 'one', 2 => '二');
$test_b = array(2 => 'two', 4 => 'four');

var_dump( $test_b + $test_a);

これは出力します

array(3) {
  [2]=>
  string(3) "two"
  [4]=>
  string(4) "four"
  [1]=>
  string(3) "one"
}

探している正確な順序ではありませんがksort()、キーで並べ替えて正確な出力を取得できます。あなたが「自動変換」と呼んでいるものは、実際には型強制と呼ばれ、PHP では型ジャグリングと呼ばれます。

于 2012-07-05T12:58:54.917 に答える
0

簡単に言えば、私はこれをしました:

foreach($new as $k => $v)
{
    $old[$k] = $v;
}
// This will overwrite all values in OLD with any existing
// matching value in NEW
// And keep all non matching values from OLD intact.
// No reindexing, and complete overwrite
// Working with all kind of data
于 2012-11-15T14:48:09.610 に答える