php str_replace 意外的字符替换

php str_replace unexpected char replace

我需要把一些单词改成数字。示例如下-

$status= str_replace(array("canceled","shipped","processing","complete","pending_payment","closed","fraud","holded","payment_review","pending"),array(4,6,2,10,1,12,0,1,1,2),$sale["status"]);

但是如果 DB 发出了意想不到的话,我想将其更改为 0。

这可能吗?

你可以这样做:

   $statuses = [
      "canceled" => 4,
      "shipped" => 6,
      "processing" => 2,
      "complete" => 10, 
      "pending_payment" => 1,
      "closed" => 12,
      "fraud" => 0,
      "holded" => 1,
      "payment_review" => 1,
      "pending" => 2,
    ];

    $status = 0;

    if (isset($statuses[$sale["status"]])) { 
        $status = $statuses[$sale["status"]];
    }

这样您就可以很容易地看到哪个字符串值映射到哪个数字。将 $status 变量的默认值设置为 0。如果给定的状态字符串存在于您的 "statusmap" 中,请替换 $status 变量。

试试这个,

$status_words = array("canceled", "shipped", "processing", "complete", "pending_payment", "closed", "fraud", "holded", "payment_review", "pending");
$status_ints = array(4, 6, 2, 10, 1, 12, 0, 1, 1, 2);
$status = (in_array(trim($sale["status"]), $status_words) ? 
           str_replace($status_words, $status_ints, trim($sale["status"])) : '');

试一试,这应该有效。