time

<?php

function mb_addslashes($str) {
    $from = Array(
        "\\\\", '"', "'", "\0", "\r", "\n", "\\\z",
        );
    $to = Array(
        "\\\\", '\"', "\'", "\\\0", "\\\r", "\\\n", "\\\z",
        );
    foreach ($from as $index => $value) {
        $str = mb_ereg_replace($value, $to[$index], $str, "p");
    }
    return $str;
}
for ($i = 0; $i < 50000; $i++) {
    mb_addslashes($str);
}

?>

real 0m3.470s
user 0m0.015s
sys 0m0.031s

<?php

$from = Array(
    "\\\\", '"', "'", "\0", "\r", "\n", "\\\z",
    );
$to = Array(
    "\\\\", '\"', "\'", "\\\0", "\\\r", "\\\n", "\\\z",
    );
function mb_addslashes($str) {
    global $from, $to;
    foreach ($from as $index => $value) {
        $str = mb_ereg_replace($value, $to[$index], $str, "p");
    }
    return $str;
}
for ($i = 0; $i < 50000; $i++) {
    mb_addslashes($str);
}

?>

real 0m3.051s
user 0m0.015s
sys 0m0.015s

こういうような奴でよく呼び出す奴は、global なところにデータを追いやった方がいいようだ。

foreach を使わないと、、、

$from = Array(
    "\\\\", '"', "'", "\0", "\r", "\n", "\\\z",
    );
$to = Array(
    "\\\\", '\"', "\'", "\\\0", "\\\r", "\\\n", "\\\z",
    );
$from_cnt = count($from);
function mb_addslashes($str) {
    global $from, $to, $from_cnt;
    for ($i = 0; $i < $from_cnt; $i++) {
        $str = mb_ereg_replace($from[$i], $to[$i], $str, "p");
    }
    return $str;
}
for ($i = 0; $i < 50000; $i++) {
    mb_addslashes($str);
}

real 0m2.839s
user 0m0.015s
sys 0m0.000s