PHP выстраивают несколько вид - значением затем ключом?

У меня есть массив строковых ключей с числовыми значениями для использования в списке тегов с количеством происшествий каждого тега, таким образом:

$arrTags['mango'] = 2; 
$arrTags['orange'] = 4; 
$arrTags['apple'] = 2; 
$arrTags['banana'] = 3;

это так, я могу отобразить список тега в убывающем порядке происшествия таким образом:

orange (4)  
banana (3) 
mango (2) 
apple (2)

я могу использовать arsort для инвертирования вида значением, которое является блестящим, но я также хочу любые теги, которые имеют то же числовое значение, которое будет отсортировано в алфавитном порядке, таким образом, конечный результат может быть:

orange (4)  
banana (3) 
apple (2) 
mango (2)

существует ли способ, которым я могу сделать это? я предполагаю, что usort может быть способом пойти, но я смотрю на примеры на php.net, и мои глаза тускнеют!большое спасибо!!!

23
задан NullPoiиteя 4 December 2012 в 12:44
поделиться

3 ответа

Взгляните на пример №3: http://php.net/manual/en/function.array-multisort.php

Вам потребуется создать два массива для использовать как индексы; один состоит из ключей исходного массива, а другой - из значений исходного массива.

Затем используйте мультисортировку для сортировки по текстовым значениям (ключам исходного массива), а затем по числовым значениям (значениям исходного массива).

15
ответ дан 29 November 2019 в 00:49
поделиться

SOLVED

После небольших экспериментов я обнаружил, что array_multisort отлично справляется с этой задачей:

$tag = array(); 
$num = array();

foreach($arrTags as $key => $value){ 
$tag[] = $key; 
$num[] = $value; 
}

array_multisort($num, SORT_DESC, $tag, SORT_ASC, $arrTags);

:)

14
ответ дан 29 November 2019 в 00:49
поделиться

В криптографии вы - то, что знаете. Если вы хотите избежать MITM, то Алиса должна иметь представление о том, кто такой «Боб», что означает, что Боб должен знать какой-то элемент данных, который не знает атакующий. Здесь ваш злоумышленник является сервером, который идеально расположен для установки атаки.

Итак, вопрос в том, кто такой Боб? Как сервер «не-Боб»?

Например, «Боб» может быть определен как: «Боб - это человек, у которого есть водительское удостоверение с написанным на нём» Бобом «». Или: «Боб - тот парень, с которым я познакомился в баре и выпил пиво».

Использование асимметричной криптографии позволяет свести проблему к вопросу доверия к открытому ключу. Элис будет использовать то, что она считает открытым ключом Боба. Поэтому Алисе нужен только какой-то способ убедиться, что открытый ключ, который у нее есть, действительно принадлежит Бобу. Владение открытым ключом определяется контролем соответствующего закрытого ключа: открытый ключ Боба является ключом, для которого закрытый ключ находится под исключительным контролем Боба (например, только Боб знает этот ключ или закрытый ключ находится в аппаратном маркере - смарт-карте, которую Боб хранит в своем кошельке).

Основным решением является прямой обмен открытым ключом. Когда Элис встретила Боба в баре, они отдали друг другу свои открытые ключи. Таким образом, Алиса может доверять открытому ключу Боба «по определению». Для облегчения обмена (особенно после нескольких сортов пива) Алиса и Боб могут обмениваться только «отпечатками пальцев», то есть значениями хэша, вычисленными по открытым ключам. Эти значения короче, чем открытые ключи (например, 128 битов вместо более чем тысячи битов для типичного открытого ключа RSA), и достаточны для проверки соответствия данного открытого ключа. В этой настройке сервер имеет репозиторий для открытых ключей, и Алиса и Боб только пересчитывают отпечатки пальцев, чтобы убедиться, что сервер не играет в фальшивые игры.

Более перспективным решением, которое уменьшает потребность в прямом употреблении алкоголя, является использование сертификатов . Сертификат - это поле, содержащее идентификатор (например, имя, например, «Боб») и открытый ключ. Поле подписано центром сертификации (CA): CA утверждает, что открытый ключ действительно принадлежит Бобу, применив его подпись. Если Алисе известен открытый ключ ЦС, то она может проверить подпись на сертификате, а затем получить доверие к связи между открытым ключом и удостоверением, содержащимся в сертификате.

Сертификация является делегированием доверия. Алиса делегирует свое доверие ЦС; предположительно, ЦА (назовем его Чарли) отправился в бар, чтобы встретиться с Бобом; через сертификат Чарли говорит Элис: «Да, это действительно ключ Боба, он показал его мне после своей третьей пинты». Здесь дела становятся немного мутными, потому что делегировать доверие непросто (особенно если Чарли по привычке пьянствует). Делегирование может быть продолжено, когда ЦС подписывает сертификат для другого ЦС. Здесь Чарли рассказывает Алисе: «Я не встречался с Бобом, но я познакомился с Дафни, которая, возможно, встретила Боба и выступила в качестве ЦА».Элис, используя как сертификат, выданный Чарли Дафни, так и сертификат, выданный Дафни Бобу, может проверить, что цепочка подписей.

В то время как Алиса может знать Чарли и доверять ему в его способности правильно идентифицировать Боба, когда он встретится с ним, даже под влиянием галлона Гиннесса, Алиса не знает Дафни. В цепочке Алиса-Чарли-Дафна-Боб Алиса должна не только доверять тому, что Чарли был надежен (он правильно идентифицировал Дафну), но и тому, что Чарли не был доверчивым, то есть что Чарли отказался бы подписать сертификат на Дафни, если бы Дафни сама не заслуживала доверия. В практических ситуациях доверие быстро ухудшается, когда оно делегировано.

При использовании сертификатов существует в основном две возможные структуры:

  • Иерархический ЦС: существует один или несколько «корневых ЦС», которые известны всем по конструкции. ЦС делегирует другому ЦС (т.е. подписывает сертификат с обычным флагом, который гласит: «этот открытый ключ может быть доверенным для целей проверки подписей на сертификатах») только в рамках договорного соглашения, которое устанавливает юридические обязанности обоих ЦС в отношении сертификации. Это означает, что делегация формально определена, и так бывает, что это непросто. Совместимый с юристами сертификационный договор, обычно называемый «Заявлением о политике сертификации» (CPS), представляет собой документ длиной 200 страниц.

  • Web of Trust: все действуют как CA. В отсутствие «формальной благонадежности» каждая отдельная цепочка дает лишь очень небольшой объем доверия. Это должно компенсироваться огромными цифрами. Алиса примет ключ Боба, только если сможет проверить несколько (много) различных цепей, которые ведут к Бобу, проходя через различных участников. Например, Алисе потребуется цепочка Чарли-Дафна-Боб, а также цепи Элайджа-Фиона-Боб и Джеральд-Хиллари-Иван-Боб. Они все пьяницы, но они могут быть коллективно надежными, в том, что фальшивый Боб должен был бы заплатить много раундов, чтобы испортить одного участника каждой из цепочек, которые использует Алиса (если Алиса требует n цепочек с различными сертификатами, то злоумышленник должен испортить по крайней мере n участников).

Так что сертификационный бизнес в основном вопрос процедуры: кто является ЦС, что ЦС проверяет перед выдачей (подписанием) сертификата, как все это выглядит с юридической точки зрения и так далее. Эти процедуры по своей сути сложны и должны поддерживаться подробностями в формате сертификата (например, флагом «этот открытый ключ является ключом ЦС»). В настоящее время определены два основных стандартных формата: X.509 и PGP . X.509 имеет большую поддержку иерархического CA, и это очень запутанный беспорядок стандартов, форматов, практики и комитетов. PGP (стандартизированный под названием «OpenPGP») не имеет реальной поддержки иерархического CA;он предназначен для использования с Web of Trust. OpenPGP проще X.509 но более ограничен, особенно если вы хотите иметь сильное юридическое значение за сертификатами.

Для сервера мгновенных сообщений все это, скорее всего, будет переполнено. Понятие идентичности, которого действительно хочет Алиса, вероятно, является понятием повторения : «что Боб такой же Боб, как тот, с которым я болтал вчера». Алиса не знает Боба заранее, но разговор с ним однажды устанавливает его личность в глазу Алисы. Она просто хочет, чтобы ее не обманул другой Боб. Для этого простой процесс, такой как «программное обеспечение Алисы сохраняет объявленный открытый ключ любой новой болтовни, и использует его впоследствии» сделает трюк. Помните, что основная проблема состоит в том, чтобы правильно определить , какое понятие идентичности вы ищете.

-121--4244528-

Конечно, можно # определить такой макрос. Каждый экземпляр FUNCTION затем заменяется на __ func __ . Однако очевидно, что компилятор не знает __ func __ . Я полагаю, что VC знает __ FUNCTION __ , так что

#if defined ( WIN32 )
#  define __func__ __FUNCTION__
#endif

может сделать.

-121--2203160-

Вы думаете, что это слишком сложно:

ksort($arrTags);
arsort($arrTags);

Теперь ваш массив отсортирован так, как вы хотите.

0
ответ дан 29 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

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