Преобразовать значения массива в массив

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 позволяет управляющим символам, через которые прекрасно, если они не составляют часть ключа или значения в строке запроса, в какой момент они должны быть экранированы.

-2
задан WPU 16 January 2019 в 16:15
поделиться

2 ответа

Мы можем пройтись по каждому пункту и передать массив «показателей» в функцию средней суммы.

«Оценки» уже в формате массива. Приведенная ниже функция (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
)
0
ответ дан Progrock 16 January 2019 в 16:15
поделиться

Вам не нужно звонить 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
0
ответ дан mickmackusa 16 January 2019 в 16:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: