0

正しい終了コードを与えてみませんか?

私の完全なコード:

<?php

$numA_m = "2";
$res = '["110","2","1"]';
$numA_s = json_decode($res);
if ($numA_m == 1) {
    $A_num_s = array("1", "2", "3", "4","110");
    $A_nam_s = array("egh", "guide", "irl", "tic", "all");
}
if ($numA_m == 2) {
    $A_num_s = array("1", "2","110");
    $A_nam_s = array("sub", "forg","all");
}
$Rsp = str_replace($A_num_s, $A_nam_s, $numA_s);
$Rsp_In = str_replace($A_nam_s, $A_num_s, $Rsp);
echo '<pre>';
print_r($Rsp);

echo '<p>';

echo '<pre>';
print_r($Rsp_In);
?>

出力は次のようになります。

配列(
[0]=>すべて
[1]=> forg
[2] => sub

配列(
[0] => 110
[1] => 2
[2] => 1

しかし、それはこのようなものです:

配列

[0] => subsub0
[1] => forg
[2] => sub

配列

[0] => 110
[1] => 2
[2] => 1

私は何をしますか?

デモ:http: //phpfiddle.org/main/code/srj-k3d

4

4 に答える 4

0

これにより、目的の結果が出力されます

$numA_m = "2";
$res = '["110","2","1"]';
$numA_s = json_decode($res);
if ($numA_m == 1) {
    $A_num_s = array("1", "2", "3", "4", "110");
    $A_nam_s = array("egh", "guide", "irl", "tic", "all");
}
if ($numA_m == 2) {
    $A_num_s = array("110", "2", "1"); // changed order
    $A_nam_s = array("all", "forg", "sub");
}
$count = 1;
$Rsp = str_replace($A_num_s, $A_nam_s, $numA_s, $count);
$Rsp_In = str_replace($A_nam_s, $A_num_s, $Rsp, $count);
echo '<pre>';
print_r($Rsp);

echo '<p>';

echo '<pre>';
print_r($Rsp_In);

説明:

str_replaceは、送信した順序で文字列を検索します。したがって、あなたの場合、を検索して1から、に到達する前に、すべての出現110箇所を置き換えます。1110

110最初に交換すると、期待どおりに交換されます。

于 2013-01-31T15:43:41.937 に答える
0

まず、str_replace正しく動作します。
できることは、配列内の順序を置き換えることです。

$A_num_s = array("110", "1", "2");
$A_nam_s = array("all", "sub", "forg");

ご使用のバージョンでは、str_replaceは「110」を2つの1(および0)と見なし、両方を「sub」(「subsub0」)に置き換えます。

変更された順序「110」が最初に一致するので、指定した順序でstr_replaceパターン()を検索します$A_num_s

于 2013-01-31T15:44:23.623 に答える
0

str_replace順番に置換し、置換の対象全体を各置換値に対して順番にチェックします。次に例を示します。

http://php.net/manual/en/function.str-replace.php

// Outputs F because A is replaced with B, then B is replaced with C, and so on...
// Finally E is replaced with F, because of left to right replacements.
$search  = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);

したがって、必要なのは1の前に110を置き換えることだけです。そうしないと、110の1が最初に置き換えられます。

$A_num_s = array("110", "2", "1");

于 2013-01-31T15:46:41.057 に答える
0

次のようにarray_replace()を使用してみることができます。おそらく理解するのは少し難しいですが、機能します;)

$numA_m = "2";
$res = '["110","2","1"]';
$numA_s = json_decode($res);
if ($numA_m == 1) {
    $A_num_s = array("1", "2", "3", "4","110");
    $A_nam_s = array("egh", "guide", "irl", "tic", "all");
}
if ($numA_m == 2) {
    $A_num_s = array("1", "2","110");
    $A_nam_s = array("sub", "forg","all");
}

$Rsp = array_replace($numA_s, $A_num_s, array_reverse($A_nam_s));
$Rsp_In = array_replace($Rsp, $A_nam_s, array_reverse($A_num_s));

echo '<pre>';
print_r($Rsp);


echo '<p>';

echo '<pre>';
print_r($Rsp_In);
?>
于 2013-01-31T15:48:40.037 に答える