0

配列があるとしましょう:

$myArray = array('alfa' => 'apple', 'bravo' => 'banana', 'charlie' => 'cherry', 'delta' => 'danjou pear');

特定のキーを検索し、見つかった場合は、この他の配列に従ってそれらの値を置き換えます。

$myReplacements = array('bravo' => 'bolognese', 'lie' => 'candy');

私はこれができることを知っています:

function array_search_replace($haystack, $replacements, $exactMatch = false) {
    foreach($haystack as $haystackKey => $haystackValue) {
        foreach($replacements as $replacementKey => $replacementValue) {
            if($haystackKey == $replacementKey || (!$exactMatch && strpos($haystackKey, $replacementKey) !== false)) {
                $haystack[$haystackKey] = $replacementValue;
            }
        }
    }
    return $haystack;
}

しかし、それを行うためのよりスマートで高速な方法は本当にありませんか?

編集:「嘘」と「チャーリー」が一致するように、キーパーツを検索できる必要もあります。

EDIT2: 期待される結果は次のとおりです。

var_dump(array_search_replace($myArray, $myReplacements));

array(4) { ["alfa"]=> string(5) "apple" ["bravo"]=> string(9) "bolognese" ["charlie"]=> string(5) "candy" ["delta"]=> string(11) "danjou pear" }

var_dump(array_search_replace($myArray, $myReplacements, true));

array(4) { ["alfa"]=> string(5) "apple" ["bravo"]=> string(9) "bolognese" ["charlie"]=> string(6) "cherry" ["delta"]=> string(11) "danjou pear" }
4

4 に答える 4

2

PHPのarray_replace機能を利用できます。

また、array_merge似たようなことをします。

あなたのコードで:

$finalArray = array_replace($myArray, $myReplacements);

完全な PHP コード

<?php
    $myArray = array('alfa' => 'apple', 'bravo' => 'banana', 'charlie' => 'cherry', 'delta' => 'danjou pear');
    $myReplacements = array('bravo' => 'bolognese', 'lie' => 'candy');
    $finalArray = array_replace($myArray, $myReplacements);
    print_r($finalArray);
?>

出力

Array
(
    [alfa] => apple
    [bravo] => bolognese
    [charlie] => cherry
    [delta] => danjou pear
    [lie] => candy
)

ここでフィドル: http://codepad.viper-7.com/60o5xT

于 2012-08-30T10:42:02.120 に答える
1

これはあなたが必要とするものですか?

<?php
$myArray = array('alfa' => 'apple', 'bravo' => 'banana', 'charlie' => 'cherry', 'delta' => 'danjou pear');
$myReplacements = array('bravo' => 'bolognese', 'lie' => 'candy');
print_r(array_merge($myArray, $myReplacements));
?>

出力:

Array
(
    [alfa] => apple
    [bravo] => bolognese
    [charlie] => cherry
    [delta] => danjou pear
    [lie] => candy
)

array_merge の使用

于 2012-08-30T10:45:38.937 に答える
0

次のコードを使用して、一致するキーを直接置き換えることができます

<?php
$base = array("orange", "banana", "apple", "raspberry");
$replacements = array(0 => "pineapple", 4 => "cherry");
$replacements2 = array(0 => "grape");

$basket = array_replace($base, $replacements, $replacements2);
print_r($basket);
?>

出力:

Array
(
    [0] => grape
    [1] => banana
    [2] => apple
    [3] => raspberry
    [4] => cherry
)
于 2012-08-30T10:47:52.647 に答える
0

PHP の配列はハッシュです。キーを検索する必要はありません。O(1) 時間でアクセスできます。

$myArray = array('alfa' => 'apple', 'bravo' => 'banana', 'charlie' => 'cherry', 'delta' => 'danjou pear');
$myReplacements = array('bravo' => 'bolognese', 'lie' => 'candy');

var_dump($myArray);

foreach($myReplacements as $k => $v) {
  if(array_key_exists($k, $myArray)) {
    $myArray[$k] = $v;
  }
}

var_dump($myArray);

出力:

array(4) {
  ["alfa"]=>
  string(5) "apple"
  ["bravo"]=>
  string(6) "banana"
  ["charlie"]=>
  string(6) "cherry"
  ["delta"]=>
  string(11) "danjou pear"
}
array(4) {
  ["alfa"]=>
  string(5) "apple"
  ["bravo"]=>
  string(9) "bolognese"
  ["charlie"]=>
  string(6) "cherry"
  ["delta"]=>
  string(11) "danjou pear"
}
于 2012-08-30T10:50:03.050 に答える