10/10/2018, 09:31

Hỏi về hàm str_replace

Cho mình hỏi làm thế nào để thay thế dãy chữ số 1234567890187654329 thành 13333333901333333339 mà chỉ cần biết số 1 và số 9 thôi là có thể thay thế các số từ 1 đến 9 thành 1 số khác.
ngoc_viet08 viết 11:41 ngày 10/10/2018
<?php
$a='1234567890187654329';
$ax=array("2","4","5","6","7","8");
$a=str_replace($ax,"3",$a);
echo $a;
?>
chạy thử đi bạn . nhóm các giá trị cần chuyển sang 1 số thành 1 mảng và đưa nó vào str_replace
bachcotsau viết 11:36 ngày 10/10/2018
Được gửi bởi ngoc_viet08
chạy thử đi bạn . nhóm các giá trị cần chuyển sang 1 số thành 1 mảng và đưa nó vào str_replace
Bạn hiểu sai ý mình rối,mình có nói chỉ cần biết số 1 và số 9 thôi có nghĩa là các số này ở giữa luôn luôn thay đổi không biết được chính xác.

Mình xin đưa ra câu hỏi đầy đủ bạn giúp mình với nha.

Mình có 1 chuỗi bao ghồm dãy chữ cái và số là 00000000123EHE9900000000123EHH9900000000123FFJ9900000000
Trong đó chia ra làm 3 chuỗi cần thay thế
123EHE99
123EHH99
123FFJ99
3 chuỗi trên chỉ có 3 ký tự ở giữa là ẩn số, không thể biết được giá trị mà chỉ biết được nó có 3 ký tự vì luôn luôn thay đổi.
1. 3 số đầu với 2 số cuối của chuỗi thì giữ nguyên
2. mỗi chuỗi cách nhau 8 ký tự vd như trên.
Làm cách nào để thay thế 3 chuỗi trên thành ký tự khác.
Mình đã thử = code sau để tes nhưng chỉ có tác dụng 1 chuỗi thôi.
mình đã làm thử code sau và tes thử
Code:
<?

/**
 * @author Nguyen Huy
 * @copyright 2009
 */


	$code = '00000000123EHE9900000000123EHH9900000000123FFJ9900000000';
	$code = substr($code, 0, 9999);
	for($x=0; $x<56; ++$x)
		{
	$code1 = substr($code,$x*8,8);
	$code2 = substr($code1, 0, 8);
	$code3 = substr($code2, 0, 3);
	$code4 = substr($code2, 6, 2);

	if ($code3 == "123" AND $code4 =="99"){
Echo"<br>Chuỗi tìm thấy $code2";
Echo"<br>";
Echo"Kết quả ".str_replace($code2,"00000000", $code)."";		
	}
}
?>
Sau đó dùng hàm str_replace nhưng nó chỉ có tác dụng 1 chuỗi
ngoc_viet08 viết 11:36 ngày 10/10/2018
bạn phải nói rõ ràng để mọi người có thể giúp !
00000000123EHE9900000000123EHH9900000000123FFJ9900 000000 là 1 chuỗi chưa biết ?
các chữ EHE EHH FFJ là các số và có thể chúng là 123 ? 990 ? 000 được ko ?
bạn phải nói rõ các yêu cầu thì mới đưa ra giải pháp chính xác được .

[=========> Bổ sung bài viết <=========]

mình để ý thấy các số 000000000 và các số 123...99 vừa đủ 8 số . nếu vậy thì mọi thứ sẽ dễ dàng !
bachcotsau viết 11:33 ngày 10/10/2018
Được gửi bởi ngoc_viet08
bạn phải nói rõ ràng để mọi người có thể giúp !
00000000123EHE9900000000123EHH9900000000123FFJ9900 000000 là 1 chuỗi chưa biết ?
các chữ EHE EHH FFJ là các số và có thể chúng là 123 ? 990 ? 000 được ko ?
bạn phải nói rõ các yêu cầu thì mới đưa ra giải pháp chính xác được .

[=========> Bổ sung bài viết <=========]

mình để ý thấy các số 000000000 và các số 123...99 vừa đủ 8 số . nếu vậy thì mọi thứ sẽ dễ dàng !
Đúng rồi nhưng mỗi chuỗi của nó chỉ ghồm 8 ký tự.
123?99 dấu ? ở giữa là 3 ký tự luôn biến đổi.
có thể làm cho 3 chuỗi trên thành 1 chuỗi tự tạo ra là thành công rồi.

[=========> Bổ sung bài viết <=========]

Hoặc bạn có thể giải giúp mình các tìm kiếm sau để so sánh là mình có thể xử lý được code trên rồi
mình dùng mã php trên để insert vào 1 table và có 1 bảng dữ liệu sau:

Code:
Name         |  Code
---------------------------------------------      
TenToi       | 123FFJ99
TenToi       | 123EJS99
TenToi       | 123AJY99
TenToi       | 123FUR99
TenToi       | 123UUJ99
Mình muốn dùng 5 đoạn mã trên để thay thế cho đoạn code sau
Code:
00000000123FFJ990000000000000000123EJS99123AJY9900000000123FUR9900000000123UUJ99
lúc đó code sẽ là
Code:
<?PHP

/**
 * @author Nguyen Huy
 * @copyright 2009
 */


$arr = array("123FFJ99","123EJS99","123AJY99","123FUR99","123UUJ99");
$arr2 = array("FFFFFFFF","FFFFFFFF","FFFFFFFF","FFFFFFFF","FFFFFFFF");	
	$code = '00000000123FFJ990000000000000000123EJS99123AJY9900000000123FUR9900000000123UUJ99';	
	$code = substr($code, 0, 9999);
	for($x=0; $x<56; ++$x)
		{
	$code1 = substr($code,$x*8,8);
	$code2 = substr($code1, 0, 8);
	$code3 = substr($code2, 0, 3);
	$code4 = substr($code2, 6, 2);

	if ($code3 == "123" AND $code4 =="99"){
Echo"Kết quả ".str_replace($arr,$arr2, $code)."";	
Echo"<br>";	
	}
}
?>

[=========> Bổ sung bài viết <=========]

Nhưng mình chưa biết cách để $arr tìm thấy 123FFJ99 và các số còn lại để đưa vào hàm.
fotech_nd viết 11:43 ngày 10/10/2018
Được gửi bởi bachcotsau
Code:
Name         |  Code
---------------------------------------------      
TenToi       | 123FFJ99
TenToi       | 123EJS99
TenToi       | 123AJY99
TenToi       | 123FUR99
TenToi       | 123UUJ99
Mình muốn dùng 5 đoạn mã trên để thay thế cho đoạn code sau
Code:
00000000123FFJ990000000000000000123EJS99123AJY9900000000123FUR9900000000123UUJ99
Không biết cái bạn cần có phải thế này không.
PHP Code:
$str "00000000123FFJ990000000000000000123EJS99123AJY9900000000123FUR9900000000123UUJ99";

if (
preg_match_all("/123***91;A-Z***93;{3}99/"$str$matches)) {
    
print_r($matches***91;0***93;);// Dùng foreach để xử lý từng phần tử tìm thấy
} else {
    echo 
"Không tìm thấy Code đúng định dạng";

Regards!!!
bachcotsau viết 11:37 ngày 10/10/2018
Cảm ơn câu trả lời của bạn nhưng mình áp dụng cho chuỗi này không được còn chuỗi trên của bạn thì ok
Ở đây có 2 chuỗi ghồm 32 ký tự
Code:
$str = "0F0000D3879D000000C00000000000000F0000CBD2F9000000C0000000000000";
if (preg_match_all("/0F0000[0-9A-Z]{0}0000C0000000000000/", $str, $matches)) {
foreach ($matches[0] as $value) {
    $value = $value;
Echo"Ban la $value";
}
} else {
    echo "Không tìm thấy Code đúng định dạng";
}
Code trên có lỗi chỗ nào bạn fix giúp mình nhé.
Mình muốn set cho thành câu lệnh sau
Code:
$aa="0F0000D3879D000000C0000000000000";
$ab="0F0000CBD2F9000000C0000000000000";
fotech_nd viết 11:42 ngày 10/10/2018
Dùng code sau
PHP Code:
$str "0F0000D3879D000000C00000000000000F0000CBD2F9000000C0000000000000";
$pattern "0F***91;0***93;{4}"// Bắt đầu là "0F0000" (0F và 4 số 0)
$pattern .= "(***91;0-9A-Z^0***93;{6})"// Theo sau là 6 kí tự 0-9, A-Z và ko được có số 0 (hoặc viết là "***91;1-9A-Z***93;{6}" cũng okie)
$pattern .= "***91;0C***93;{20}"// Theo sau nữa là 20 kí tự 0 hoặc C
if (preg_match_all("/{$pattern}/"$str$matches)) {
    
print_r($matches***91;0***93;);// Dùng foreach để xử lý từng phần tử tìm thấy 
    
print_r($matches***91;1***93;);// Dùng foreach để xử lý từng phần tử có nghĩa nhất (6 kí tự ở giữa - "(***91;0-9A-Z^0***93;{6})")
} else {
    echo 
"Không tìm thấy Code đúng định dạng";

=> Bạn có thể tìm tài liệu về Regular Expression để tùy chỉnh cho dễ

Regards!
bachcotsau viết 11:39 ngày 10/10/2018
Bạn giúp thì giúp cho trót,tách giúp mình 1 khúc đó ra thành 2 khúc để sao cho
Code:
$aa="0F0000D3879D000000C0000000000000";
$ab="0F0000CBD2F9000000C0000000000000";
Và mình mới có thể tìm $aa hay là $ab dể sử dụng.
Mình cho
Code:
$pattern .= "([0-9A-Z^0]{6})";
thành 8 số không được vì 2 khúc trên mỗi khúc chia làm 3 đoạn 6 8 và 18

[=========> Bổ sung bài viết <=========]

Cảm ơn bạn đã giúp mình về đoạn mã trên và mình đã tách được nó ra làm 2 mảng như sau
Code:
<?php

$str = "0F0000D3879D000000C00000000000000F0000CBD2F9000000C0000000000000";
$pattern = "0F[0]{4}"; // Bắt đầu là "0F0000" (0F và 4 số 0)
$pattern .= "([0-9A-Z]{6})"; // Theo sau là 6 kí tự 0-9, A-Z và ko được có số 0 (hoặc viết là "[1-9A-Z]{6}" cũng okie)
$pattern .= "[0C]{20}"; // Theo sau nữa là 20 kí tự 0 hoặc C
if (preg_match_all("/{$pattern}/", $str, $matches)) {
    $aa=$matches[0][0];
    $ab=$matches[0][1];
    echo "Mảng 1 là $aa <br>";
    echo "Mảng 2 là  $ab";
} else {
    echo "Không tìm thấy Code đúng định dạng";
}  
?>
Nhưng khi mình lấy khúc giữa là 8 ký tự lại không được.

[=========> Bổ sung bài viết <=========]

Mình hoàn thiện xong rồi cảm ơn bạn đã giúp đỡ.
Bài liên quan
0