Разделите количество на символы, присутствующие в строке, найденные через регулярное выражение - PullRequest
0 голосов
/ 01 апреля 2009

Приветствуются предложения по обновлению заголовка, так как у меня возникают проблемы с количественной оценкой того, что я пытаюсь сделать.

Это веб-форма, в которой PHP выполняет вычисления, хотя этот вопрос, вероятно, имеет алгоритмический или независимый от языка ответ.

По сути, есть поле «Сумма» и поле «Код оплаты». Введенный код оплаты представляет собой сокращение для нескольких «агентов», на которые делится сумма. В большинстве случаев речь идет о единичных буквах, однако есть несколько случаев, когда это варьируется и создает некоторые проблемы.

В основном, A = AgentType1, J = AgentType2, L = AgentType3, и, как утверждают документы и требования пользователя, «A2» также является допустимой заменой «J».

Таким образом, сумма 50 и код начисления "AJ" приведут к тому, что сумма будет разделена на 2 (два агента) и распределена соответственно. То же самое для строки типа "AA2".

Я сейчас настроил процесс (который работает), который выглядит следующим образом:

Divide = 0;
RegEx check for AgentType1 in Charge Code: 
 Divide++;
 Set This-AgentType-Gets-Return; 
RegEx check for AgentType2 in Charge Code: 
 Devide++;
 Set This-AgentType-Gets-Return;
... etc ...

Затем я делю Сумму на сумму «Делить», и результат делится на каждый Тип агента, представленный в Кодах начислений.

Я знаю, что должен быть более простой способ реализовать это, но в данный момент он мне не подходит.

Есть ли способ быстро определить количество типов агентов, включенных в код оплаты, и какими они являются?

Ответы [ 3 ]

1 голос
/ 01 апреля 2009

Я бы, наверное, просто сделал что-то простое, как это:

$valid_codes = array('A', 'J', 'L');

// deal with the special A2 case first, to get it out of the string
// this code could be generalized if more special cases need to be handled
if (stripos($charge_code, 'A2') !== FALSE)
{
    $found['J'] = true;
    str_ireplace('A2', '', $charge_code);
}

foreach ($valid_codes as $code)
{
    if (stripos($charge_code, $code) !== FALSE) // if the code was in the string
    {
        $found[$code] = true;
    }
}

Теперь вы можете получить число, на которое нужно разделить сумму, с помощью count($found), а коды, между которыми нужно разделить, с помощью array_keys($found).

1 голос
/ 01 апреля 2009

Можете ли вы изменить поле кода заряда на массив полей? Что-то вроде:

<input type="hidden" name="agent[]" value="A" />

для всех ваших агентов позволят вам сделать:

$divide = count($_POST["agent"]);
foreach($_POST["agent"] as $agent) {
    $sum = $_POST["amount"] / $divide;

    //do other stuff
}
0 голосов
/ 01 апреля 2009

Не могли бы вы сопоставить строку чем-то вроде этого регулярного выражения

^([A-Z]\d*)*$

а потом работать через сгенерированный список совпадений? Делителем будет длина этого списка (возможно, после удаления дубликатов).

Для сопоставления символов с агентами (почему AgentTypes?) Вы можете использовать простой ассоциативный список или хэш-карту (я не знаю, какие конструкции проще всего доступны в PHP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...