別の関数を呼び出して_array_map
_を実行せずに、_str_replace
_を_str_replace
_と組み合わせて使用することは可能ですか?
例えば:array_map(str_replace(' ', '-', XXXXX), $myArr);
Array_mapは必要ありません。 docs から: "subjectが配列の場合、検索と置換はsubjectのすべてのエントリで実行され、戻り値も配列です。"
いいえ、できません。ただし、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
)
確かにそれは可能です、あなたはただ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);
_
str_replace
で使用されている配列が多次元の場合、str_replace
は機能しないことに注意してください。
これは、追加の関数を呼び出さずにarray_map
を使用するという質問に直接答えることはできませんが、str_replace
の最初のパラメーターのarray_map
の代わりに、この関数が役立つ場合があります。多次元配列ではarray_map
と文字列置換を使用する必要があります。 str_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;
}