#php #string
#php #строка
Вопрос:
Итак, я пытаюсь заставить приведенный ниже код заменять только значения в строке, поэтому Maths = 1, English = 1 и Media (краткий курс) = 0,5. Таким образом, должно получиться 2.5, однако его вывод 14. Я предполагаю, что это означает, что он суммирует все значения в массиве.
Итак, я хочу заменить значения в строке определенными числовыми значениями, а затем сложить их. Есть идеи?
$strg2 = 'Maths, English, Media (Short course)';
$gcse = explode(',', $strg2);
$gcse = array(
'Maths' => '1',
'English' => '1',
'EnglishLit' => '1',
'Science' => '1',
'Art' => '1',
'ICT (full course)' => '1',
'ICT (Short course)' => '0.5',
'Media (Full course)' => '1',
'Media (Short course)' => '0.5',
'Geography' => '1',
'History' => '1',
'ChildCare' => '1',
'Religious' => '1',
'Electronics' => '1',
'Higher' => '0.5',
'Foundation' => '0.5');
echo array_sum($gcse);
Комментарии:
1. Что ж, если эти значения являются числами, и вам нужно использовать их как числа (выполняя сложение), сделайте это числовыми переменными, а не строками…
2. я ДЕЙСТВИТЕЛЬНО запутался в том, что вам нужно, но я вижу,
replace
иstring
итак, как это? php.net/manual/en/function.str-replace.php
Ответ №1:
Я думаю, вы пытаетесь создать «оценку» на основе входной строки, $strg2
. Вам нужно будет разбить эту строку на массив, а затем выполнить итерацию, сопоставив уроки со значением $gcse
массива.
$strg2 = 'Maths, English, Media (Short course)';
$gcse = array(
'Maths' => '1',
'English' => '1',
'EnglishLit' => '1',
'Science' => '1',
'Art' => '1',
'ICT (full course)' => '1',
'ICT (Short course)' => '0.5',
'Media (Full course)' => '1',
'Media (Short course)' => '0.5',
'Geography' => '1',
'History' => '1',
'ChildCare' => '1',
'Religious' => '1',
'Electronics' => '1',
'Higher' => '0.5',
'Foundation' => '0.5');
$lessons = explode(',', $strg2); // Split the string into an array that can be iterated
$n = 0;
foreach ($lessons as $lesson) {
$n = $gcse[trim($lesson)]; // n = n the value of lesson
}
echo $n;
Ответ №2:
Если вы хотите использовать только операции с массивом, вы можете сделать следующее:
$lessons = explode(',', $strg2);
$lessons = array_map('trim', $lessons);
$lessons = array_flip($lessons);
$result = array_intersect_key($gcse, $lessons);
echo array_sum($result);
В противном случае решение, предложенное @beingalex, будет быстрее во всех ситуациях.
PS: Просто для удовольствия, однострочник:
echo array_sum(array_intersect_key($gcse, array_flip(array_map('trim', explode(',', $strg2)))));