Мы можем пройтись по каждому пункту и передать массив «показателей» в функцию средней суммы.
«Оценки» уже в формате массива. Приведенная ниже функция (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
)
Я раньше думал, что это не имело значения, но я всегда полностью определяю команды использования.
Править: Проверенный спецификация C#, разделите 9.4, говорит что:
Объем директивы использования конкретно не включает свои директивы использования однорангового узла. Таким образом директивы использования однорангового узла не влияют друг на друга, и порядок, в котором они записаны, незначителен.
Таким образом, если Система. Наборы. Универсальный и KeyValuePair рассматриваются как коллег затем, KeyValuePair собирается проигнорировать Систему. Наборы. Универсальный.
Да, это делает - до маленькой степени. Существует пограничный случай, чтобы сделать с обзором / локальные имена, видеть блог Eric Lippert.
Для конкретного примера (конкретный для искажения использования):
using System;
using Foo = Bar;
public static class Bar {
public static void Test() { Console.WriteLine("outer"); }
}
namespace MyNamespace {
//using Foo = Bar;
public static class Bar {
public static void Test() { Console.WriteLine("inner"); }
}
static class Program {
static void Main() {
Foo.Test();
}
}
}
Да это делает, у меня есть рабочий пример к подобному вопросу (Конфликты пространства имен).
В сущности правила для поиска имени отличаются, если директива использования глобальна (вне пространства имен) или в пространстве имен, когда это берет более высокий приоритет.
Это чисто информационно, ре один из ответов, утверждая, что это влияет на время, когда блок загружается; но в действительности, блоки загружаются в первый раз, когда метод/тип с помощью них является JITted (или получил доступ через отражение, и т.д.).
Вот пример, показывающий его имеющий значение; с using
в любом месте вывод является тем же: System.Core
загружается как Bar
получает JITted:
pre-Bar
System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
pre-Max
Max: 5
post-Max
post-Bar
пример (выполненный в командной строке, не в отладчике; идеально в конфигурации выпуска):
using System;
//using System.Linq;
namespace Foo {
using System.Linq;
class Program {
static Program() {
AppDomain.CurrentDomain.AssemblyLoad += (s, a) => {
Console.WriteLine(a.LoadedAssembly.FullName);
};
}
static void Main() {
Console.WriteLine("pre-Bar");
Bar();
Console.WriteLine("post-Bar");
Console.ReadLine();
}
static void Bar() {
Console.WriteLine("pre-Max");
int[] data = { 1, 2, 3, 4, 5 };
Console.WriteLine("Max: " + Enumerable.Max(data));
Console.WriteLine("post-Max");
}
}
}