0

私はPHPの配列メソッドを理解しようとしているので、これを解決するために配列メソッドを使用することを好みます。

これが私のデータです:

$dataA =>
    array
      0 => 
        array
          'type' => string 'name' (length=4)
          'key' => string 'keywords' (length=8)
          'content' => string 'keywordA' (length=14)

$dataB =>
    array
      1 => 
        array
          'type' => string 'name' (length=4)
          'key' => string 'keywords' (length=8)
          'content' => string 'keywordB' (length=14)

私がやりたいのは、2つの配列をマージし、最後のcontentキーを次のようにすることです。

$finalData =>
    array
      0 => 
        array
          'type' => string 'name' (length=4)
          'key' => string 'keywords' (length=8)
          'content' => string 'keywordB' (length=14)
                               ^-- notice here that the content has changed based on the fact that 'key' for both is 'keywords'

ご覧のとおり、最終的なコンテンツ値は$dataBからのものです。

4

2 に答える 2

0

のコピーを作成してから$dataB、ループし$dataAます。の値がに$dataA見つからない場合は$dataB、コピーに追加してください。

于 2012-11-11T14:02:39.427 に答える
0

再帰的置換はあなたが望むことをします

$finalData = array_replace_recursive($dataA, $dataB);

この特定の例では、plus演算子も必要な処理を実行します。

$finalData = $dataB + $dataA;

ただし、引数は別の順序で指定する必要があります。

そのような組み込み関数はありません。1つの特定のキーのみを置き換えるものが必要です。他のキーが等しい場合にのみ、2番目の配列と同等です。さらに、ゼロインデックスの連想配列があり、2番目のレベルでのみアイテムを比較する必要があります。説明した後で見ると、誰もが必要とする一般的な機能ではないことに気付くかもしれません。そのため、標準の機能セットには含まれていません。

key値が配列ごとに一意であると仮定すると、ここに目に見えるループのないソリューションがあります。

$getKey = function($item){ return $item['key']; };
$keysA = array_map($getKey, $dataA);
$keysB = array_map($getKey, $dataB);
$finalData = array_values(array_replace_recursive(
    array_combine($keysA, $dataA), 
    array_combine($keysB, $dataB) 
));
于 2012-11-11T14:12:49.760 に答える