Есть ли у php std :: pair в С ++? - PullRequest
0 голосов
/ 22 февраля 2012

Я хотел бы создать ассоциативный массив в PHP, где ключом является пара строк.

Сначала я рассматривал объединение строк с каким-то уникальным делителем посередине, а затем разделял их позже, но это похоже на хакерский обходной путь для использования пары.

Рассмотрим следующий код:

$andrew = array('Andrew', 'Rasmussen');
$john = array('John', 'Smith');
$container[$andrew] = 15;
$container[$john] = 12;

$pair = array('Andrew', 'Rasmussen');
if (array_key_exists($pair, $container)) {
    echo 'true';
} else {
    echo 'false';
}

Очевидно, что этот код не будет работать, потому что вы не можете использовать массив в качестве ключа в массиве в PHP. Есть ли хороший способ сделать что-то подобное без объединения и последующего анализа строк?

Редактировать

У меня есть причина хотеть сделать это. У меня есть array(key=string1,value=array(key=string2,value=occurrences)), и я пытаюсь найти топ-5 (с точки зрения вхождений) пар строк. Поэтому я в основном пытаюсь сгладить это в одномерный массив, а затем отсортировать его, чтобы я мог легко получить верхнюю пятерку. Но для этого мне понадобится возможность извлекать строки отдельно после того, как я отсортировал, что может быть сделано с помощью алгоритма делителя, описанного выше, но это не является предпочтительным, поэтому я прошу альтернативу.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Как насчет serialize ввода ключа?

$pair = array('Andrew', 'Rasmussen');
if (array_key_exists( serialize( $pair), $container)) {
    echo 'true';
} else {
    echo 'false';
}
1 голос
/ 22 февраля 2012

Вы можете использовать многомерные массивы (например, используя $container["Andrew"]["Rasmussen"]).

Также вы можете инкапсулировать все «взломы» (будь то двумерные массивы или конкатенацию строк) вВаш пользовательский класс ArrayIndexedByPairs, который может выглядеть следующим образом:

interface IArrayIndexedByPairs {
    public Add($key1, $key2, $value);
    public Contains($key1, $key2);
    public Get($key1, $key2);
}
...