26

を行うために別の関数を呼び出さずarray_mapに と組み合わせて使用​​することは可能ですか?str_replacestr_replace

例えば:
array_map(str_replace(' ', '-', XXXXX), $myArr);

4

4 に答える 4

63

array_mapは必要ありません。ドキュメントから:「サブジェクトが配列の場合、検索と置換はサブジェクトのすべてのエントリで実行され、戻り値も配列です。」

于 2011-06-03T11:47:59.993 に答える
13

いいえ、できません。ただし、PHP 5.3 を使用している場合は、次のようにすることができます。

$data = array('foo bar baz');
$data = array_map(function($value) { return str_replace('bar', 'xxx', $value); }, $data);
print_r($data);

出力:

Array
(
    [0] => foo xxx baz
)
于 2011-06-03T11:38:34.380 に答える
8

array_map()確かにそれは可能です、あなたはただコールバック関数のために正しい入力を与える必要があります。

array_map(
    'str_replace',            // callback function (str_replace)
    array_fill(0, $num, ' '), // first argument    ($search)
    array_fill(0, $num, '-'), // second argument   ($replace)
    $myArr                    // third argument    ($subject)
);

しかし、質問の特定の例では、chiborgが言ったように、必要はありません。str_replace()文字列の配列でうまく機能します。

str_replace(' ', '-', $myArr);
于 2011-06-03T11:59:14.373 に答える
1

str_replace使用されている配列が多次元の場合、機能しないことに注意することが重要かもしれstr_replaceません。

array_mapこれは、追加の関数を呼び出さずに使用するという問題に直接答えることはありませんが、多次元配列で文字列置換を使用する必要があると判断した場合、この関数はstr_replaceinの最初のパラメーターの代わりに役立つ場合があります。を使用した場合と同じように動作します。array_maparray_mapstr_replace

function md_str_replace($find, $replace, $array) {
/* Same result as using str_replace on an array, but does so recursively for multi-dimensional arrays */

if (!is_array($array)) {
  /* Used ireplace so that searches can be case insensitive */
  return str_ireplace($find, $replace, $array);
}

$newArray = array();

foreach ($array as $key => $value) {
  $newArray[$key] = md_str_replace($find, $replace, $value);
}

return $newArray;
}
于 2012-09-19T20:31:37.840 に答える