Это мой массив
$sub = array("English"=>"12","Hindi"=>"12","History"=>"12","Geography"=>"12","Mathematics"=>"12","Physics"=>"12","Chemistry"=>"12","Biology"=>"12");
Хотите передать весь этот массив в качестве параметра функции & хочу суммировать оценки (значения массива) с помощью функции
function sum_marks($sub){--Function body--
}
Я не знаю, если это правильный синтаксис для передачи массива в функцию, помогите!
Попробуй это. Это создаст функцию, которая имеет ссылку на ваш массив. При изменении массива вы можете вызвать произведение функции, и она пересчитает сумму.
$array = ['English' => '12', 'Swedish' => '12'];
function arraySumCb(&$subject) {
return function () use (&$subject) {
return array_sum($subject);
};
}
$sum = arraySumCb($array);
echo $sum(); // 24
$array['Swedish'] = '15';
echo $sum(); // 27
$array['Swedish'] = '10';
echo $sum(); // 22
Редактировать: Вот как я бы это сделал.
$array = ['English' => '12', 'Swedish' => '12'];
class SumMarks {
private $_subject;
public function __construct(array &$subject = []) {
$this->_subject = &$subject;
}
public function __toString() {
return "" . array_sum($this->_subject);
}
}
$sum = new SumMarks($array);
echo $sum; // 24
$array['Swedish'] = '10';
echo $sum; // 22
Изменить: Правильное использование анонимных функций PHP
Это вы ищете?
$mySum = array_sum($sub);
Да, это подходящий синтаксис для передачи массива в качестве аргумента функции.
Тем не менее, вы можете рассмотреть возможность добавления объявления типа для $sub
аргумент:
function sum_marks(array $sub)
{
return array_sum($sub);
}
Объявления типов позволяют функциям требовать, чтобы параметры имели определенный тип во время вызова. Если заданное значение имеет неправильный тип, то генерируется ошибка: в PHP 5 это будет исправимая фатальная ошибка, в то время как PHP 7 выдаст TypeError исключение.
Тем не менее, вы действительно, вероятно, просто хотите использовать array_sum()
непосредственно.
Для справки смотрите:
Я не понимаю ваш вопрос, пожалуйста, задавайте с конкретным вопросом. ,
Но, может быть, это то, что вы хотите:
function sum_marks($sub){
$result = array_sum($sub);
retrun $result;
}