Php – كيفية استبدال الأرقام الرومانية في سلسلة بأعداد صحيحة؟

[ad_1]

لدي سلسلة تحتوي على كلمات ورقم روماني واحد أو أكثر من واحد (I) إلى عشرة (X).
أحتاج إلى استبدال هذه الأرقام بأعداد صحيحة.

هذا ما حاولت:

بي أتش بي
$reps = [
'I' => 1,
'II' => 2,
'III' => 3,
'IV' => 4,
'V' => 5,
'VI' => 6,
'VII' => 7,
'VIII' => 8,
'IX' => 9,
'X' => 10
];

$str = "word word VII word ...";

$str2 = str_replace(array_keys($reps), $reps, $str);

لكنه لا يعمل: تم استبدال “VII” بـ “511” بدلاً من “7”.

كيف يمكنني إصلاح ذلك؟

ما حاولت:

بي أتش بي
$reps = [
'I' => 1,
'II' => 2,
'III' => 3,
'IV' => 4,
'V' => 5,
'VI' => 6,
'VII' => 7,
'VIII' => 8,
'IX' => 9,
'X' => 10
];

$str = "word word VII word ...";

$str2 = str_replace(array_keys($reps), $reps, $str);

الحل 2

كما هو موثق في PHP: str_replace – يدوي[^], str_replace() المباريات من الأول إلى الأخير.
لتفعل ما تريد، عليك أن تضع جميع سلاسل البحث قبل أي بادئة منها، لذلك أمر مثل

IV IX III II I VIII VII VI V X

يجب أن تعمل.

الحل 3

بالإضافة إلى ما ورد أعلاه وتعليقك –

مشكلتك هي أن ‘str_replace’ يقوم بإجراء عمليات الاستبدال بالترتيب الذي تظهر به في المصفوفة الخاصة بك كما هو مذكور أعلاه. يمكنك استخدام الدالة “strtr” (وظيفة PHP strtr[^]) بالإضافة إلى وظيفة استبدال مخصصة لإرجاع الاستبدال الصحيح، وتم اختبارها مع جميع عناصر المصفوفة الموجودة محرر W3Schools[^] –

لغة البرمجة
<!DOCTYPE html>
<html>
<body>

<?php
$reps = [
    'I' => 1,
    'II' => 2,
    'III' => 3,
    'IV' => 4,
    'V' => 5,
    'VI' => 6,
    'VII' => 7,
    'VIII' => 8,
    'IX' => 9,
    'X' => 10
];

$str = "word word IX word ...";

function replaceNumerals($matches) {
    global $reps;
    return $reps[$matches[0]];
}

$str2 = preg_replace_callback('/\b(?:' . implode('|', array_map('preg_quote', array_keys($reps))) . ')\b/', 'replaceNumerals', $str);

print_r($str2);
?>

</body>
</html>

إرجاع “كلمة كلمة 9 كلمة …”

[ad_2]

コメント

タイトルとURLをコピーしました