3

数字の文字列が正しく置き換えられません。

交換後の出力は期待しています9876543210が、そうではないようです。

私は何を間違っていますか?

<?php
$numbers = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$code = array('9', '8', '7', '6', '5', '4', '3', '2', '1', '0');

$pre = '0123456789';
echo $pre . " ==> " . str_replace($numbers, $code, $pre);
?>
4

2 に答える 2

6

0123443210str_replace を配列に使用すると、反復処理中に以前の一致が置き換えられるため、出力が生成されます。$numbers

このような 1 文字の転置には、代わりにstrtrを使用します

 $encoded = strtr($pre, "0123456789", "9876543210");
于 2013-07-10T09:28:45.333 に答える
1

説明すると少し長くなりますが、何が起こっているのかをお見せしましょう。配列内の各要素について、文字列の最初からすべてを置き換えています。N$numberC$codeRを定義しましょう$result

N       C       R
0       9       9123456789
1       8       9823456789
2       7       9873456789
3       6       9876456789
4       5       9876556789
5       4       9876446789
6       3       9873443789
7       2       9823443289
8       1       9123443219
9       0       0123443210

したがって、Paul が提供するソリューションを使用する必要があります。strtr()

于 2013-07-10T09:35:45.480 に答える