2013-07-25 24 views
11

Giả sử có một chuỗi "foo boo foo boo" Tôi muốn thay thế tất cả các fooes bằng boo và booes bằng foo. Đầu ra dự kiến ​​là "boo foo boo foo". Những gì tôi nhận được là "foo foo foo foo". Làm thế nào để có được sản lượng dự kiến ​​thay vì sản lượng hiện tại?trao đổi hai từ trong một chuỗi php

$a = "foo boo foo boo"; 
    echo "$a\n"; 
    $b = str_replace(array("foo", "boo"), array("boo", "foo"), $a); 
    echo "$b\n"; 
    //expected: "boo foo boo foo" 
    //outputs "foo foo foo foo" 

Trả lời

23

Sử dụng strtr

Từ hướng dẫn:

Nếu đưa hai argume nts, ​​thứ hai phải là một mảng trong mảng biểu mẫu ('from' => 'to', ...). Giá trị trả về là một chuỗi trong đó tất cả các lần xuất hiện của các khóa mảng đã được thay thế bằng các giá trị tương ứng. Các phím dài nhất sẽ được thử trước. Khi một chuỗi con đã được thay thế, giá trị mới của nó sẽ không được tìm kiếm lại.

Trong trường hợp này, các khóa và giá trị có thể có bất kỳ độ dài nào, miễn là không có khóa trống; bổ sung, độ dài của giá trị trả lại có thể khác với giá trị của str. Tuy nhiên, chức năng này sẽ hiệu quả nhất khi tất cả các phím có cùng kích thước.

$a = "foo boo foo boo"; 
echo "$a\n"; 
$b = strtr($a, array("foo"=>"boo", "boo"=>"foo")); 
echo "$b\n"; 

Đầu ra

foo boo foo boo 
boo foo boo foo 

In Action

+2

+1. Đã học được 'strtr', cảm ơn! – Fallen

+0

Kết quả là tất cả các mục sẽ là "foo"? – Bora

+0

@Bora: không. tất cả 'foo' sẽ được thay thế bằng' boo' và ngược lại ... – Fallen

3

Có lẽ sử dụng một giá trị tạm thời như coo.

mẫu mã ở đây,

$a = "foo boo foo boo"; 
echo "$a\n"; 
$b = str_replace("foo","coo",$a); 
$b = str_replace("boo","foo",$b); 
$b = str_replace("coo","boo",$b); 
echo "$b\n"; 
0
$a = "foo boo foo boo"; 
echo "$a\n"; 
$a = str_replace("foo", "x", $a); 
$a = str_replace("boo", "foo", $a); 
$a = str_replace("x", "boo", $a); 
echo "$a\n"; 

lưu ý rằng "x" không thể xảy ra trong $ a

2

Đầu tiên foo-zoo. Sau đó boo-foo và cuối cùng zoo để boo

$search = array('foo', 'boo', 'zoo'); 
$replace = array('zoo', 'foo', 'boo'); 
echo str_replace($search, $replace, $string); 
0

Thử

$a = "foo boo foo boo"; 
echo "$a\n"; 
$b = str_replace(array("foo", "boo","[anything]"), array("[anything]", "foo","boo"), $a); 
echo "$b\n"; 
1

Nếu như trong ví dụ này là thứ tự của trường hợp của bạn sau đó sử dụng explodearray_reverse chức năng có thể được thuận tiện cũng như:

//the original string 
$a = "foo boo foo boo"; 

//explodes+reverse+implode 
$reversed_a = implode(' ', array_reverse(explode(' ', $a))); 

//gives boo foo boo foo 

PS: Có thể không là m Emory thân thiện và có thể không đáp ứng tất cả các trường hợp xung quanh thay thế mặc dù, nhưng nó chỉ đơn giản là đáp ứng các ví dụ bạn đã cung cấp. :)

Các vấn đề liên quan