Swift 3
let allowedQueryParamAndKey = NSCharacterSet.urlQueryAllowed.remove(charactersIn: ";/?:@&=+$, ")
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)
Swift 2.2 (Заимствование из Zaph и исправление для ключа запроса и значений параметров)
var allowedQueryParamAndKey = NSCharacterSet(charactersInString: ";/?:@&=+$, ").invertedSet
paramOrKey.stringByAddingPercentEncodingWithAllowedCharacters(allowedQueryParamAndKey)
Пример:
let paramOrKey = "https://some.website.com/path/to/page.srf?a=1&b=2#top"
paramOrKey.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey)
// produces:
"https%3A%2F%2Fsome.website.com%2Fpath%2Fto%2Fpage.srf%3Fa%3D1%26b%3D2%23top"
Это более короткая версия ответа Брайана Чена. Я предполагаю, что urlQueryAllowed
позволяет управляющим символам, через которые прекрасно, если они не составляют часть ключа или значения в строке запроса, в какой момент они должны быть экранированы.
Мы можем пройтись по каждому пункту и передать массив «показателей» в функцию средней суммы.
«Оценки» уже в формате массива. Приведенная ниже функция (calculate_average_score
) использует функцию php array_sum
, которая суммирует элементы массива. count
возвращает количество элементов в массиве. Таким образом, чтобы получить среднее значение - просто разделите одно на другое.
<?php
$people =
[
[
'name' => 'Jim',
'scores' => [1,2,3]
],
[
'name' => 'Derek',
'scores' => [4,5,6]
]
];
function calculate_average_score(array $scores) {
return array_sum($scores)/count($scores);
}
foreach($people as $person)
{
printf(
"%s's average score is %d.\n",
$person['name'],
calculate_average_score($person['scores'])
);
}
Вывод:
Jim's average score is 2.
Derek's average score is 5.
В качестве альтернативы мы могли бы создать новый массив из нашего оригинала с именами и счетами в качестве ключей и значений, используя array_column
. Затем мы можем обработать каждое из этих значений (оценки массива) с помощью функции с array_map
:
$name_scores = array_column($people, 'scores', 'name');
$name_averages = array_map('calculate_average_score', $name_scores);
print_r($name_averages);
Вывод:
Array
(
[Jim] => 2
[Derek] => 5
)
Вам не нужно звонить array_values()
, подмассивы уже проиндексированы.
$person1 = [
'notes' => [1,2,3]
];
$person2 = [
'notes' => [4,5,6]
];
$data=[$person1,$person2];
foreach ($data as $student) {
$Array[] = $student['notes'][0];
}
// now $Array = [1, 4];
echo calculateAverageScore($Array); // 2.5
Это передаст все значения первого элемента вашей пользовательской функции в виде одномерного массива.
Если вы хотите усреднить баллы по каждому человеку ...
foreach ($data as $student) {
echo calculateAverageScore($student['notes']);
}
// displays 2 then 5