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


لدي سلسلة تحتوي على كلمات ورقم روماني واحد أو أكثر من واحد (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 كلمة …”

コメント

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