подстановка некоторых значений в строку

#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)))));