Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как создать функцию PHP с базой SQL

Паштет Знаток (331), на голосовании 4 года назад
Подскажите, как правильно сделать функцию.
Есть таблица SQL, в таблице есть столбец со значениями
q1=1005|q2=1000|q3=999|q4=1003|
Как пропустить через PHP что бы оно сложило q1+q2+q3+q4

таблица stats, столбец тоже stats

function sum_q1234($stats) {
????
}

Спасибо.
Голосование за лучший ответ
dim565 Искусственный Интеллект (424764) 4 года назад
Вижу только вариант с извлечением цифр из значения ячейки.

$source = 'q1=1005|q2=1000|q3=999|q4=1003|';
preg_match_all('/=(\d+)\|/', $source, $matches);
$sum = array_sum ($matches[1]); // $matches[0] содержит цифры с мусором, $matches[1] только цифры
echo $sum; // выведет 4007

Вместо $source напишите код для получения значения нужного столбца
ПаштетЗнаток (331) 4 года назад
Мне предложили еще такой вариант
function sum_s1234($stats) {
$kvArray = explode('|', $stats);
$sum = 0;
foreach ($kvArray as $element) {
$kv = explode('=', $element);
$key = $kv[0];
$value = $kv[1];
if ($key === 's1' || $key === 's2' || $key === 's3' || $key === 's4') {
$num = intval($value);
$sum += $num;
}
}
return $sum;
}
dim565 Искусственный Интеллект (424764) Я тоже сначала думал про разбитие строки через explode, но потом понял, что придется делать два раза, а я стараюсь решать задачу как можно более коротким кодом. Предложенный вам код тоже будет работать, только небольшая ошибка в строке if ($key === 's1' || $key === 's2' || $key === 's3' || $key === 's4') нужно заменить все s на q в соответствии с вашим условием. Еще одна проблема в этой строке - она делает функцию неуниверсальной, как видите учитывает только 4 значения, а если в столбце появятся другие (q5, q6) они не будут учтены, придется дорабатывать код
АндрейВысший разум (461464) 4 года назад
Можно: '/\b\d+/' - тогда сразу получаем числа в $matches[0]
dim565 Искусственный Интеллект (424764) Спасибо, работает! Я как раз пытался найти способ обойтись без группировок, но не удалось (в регулярках я новичок)
Саня Семенов Оракул (60497) 4 года назад
а чо не судьба сделать в разных столбцах изначально ?
Похожие вопросы