Есть ли словари на php?

87

Например:

$names = {[bob:27, billy:43, sam:76]};

а затем иметь возможность ссылаться на него следующим образом:

 $names[bob]
Bzupnick
источник
1
Дайте определение «словарь». Вы имеете в виду простой ассоциативный массив?
jerluc
Если вы размещаете / извлекаете данные из базы данных, разве вы не искали бы вместо этого словарь для базы данных?
Niklas
да, это именно то, о чем я говорю. и идк, я не думал об этом .... лол
bzupnick
У @cularis есть ваш ответ
jerluc
1
@bzupnick, тогда вы должны их отсортировать .
cypher

Ответы:

104

http://php.net/manual/en/language.types.array.php

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

Таким образом можно использовать стандартные массивы.

Джейкоб
источник
проблема с массивами заключается в том, что когда я их сортирую (), мне нужно сохранить индекс, который является ключом db, поэтому я могу повторно запросить это значение
bzupnick
2
См. Эту страницу: php.net/manual/en/array.sorting.php . В PHP более 20 методов сортировки ;-). Вам, вероятно, понадобится ksort.
Grad van Horck
2
@ Феликс: Ага. Я имел в виду тот самый ;-) asort в данном случае лучше. :-)
Grad van Horck
или arsort yeh? Потому что мне нужен самый высокий, чтобы быть на вершине
bzupnick
2
Если бы коллега начал работать на php из фона C. Он спросил меня, как сделать словарь на php, и я сказал, что wtf - это словарь o_o Теперь я знаю
Captain Hypertext
14

Нет, в php нет словарей. Самое близкое, что у вас есть, - это массив. Однако массив отличается от словаря тем, что массивы имеют как индекс, так и ключ. В словарях есть только ключи и нет индекса. Что я имею в виду?

$array = array(
    "foo" => "bar",
    "bar" => "foo"
);

// as of PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

Следующая строка разрешена с указанным выше массивом, но выдала бы ошибку, если бы это был словарь.

print $array[0]

В Python есть как массивы, так и словари.

Брент Расселл
источник
0

Нормальный arrayможет служить структурой данных словаря. В общем, он имеет многоцелевое использование: массив, список (вектор), хеш-таблица, словарь, коллекция, стек, очередь и т. Д.

$names = [
    'bob' => 27,
    'billy' => 43,
    'sam' => 76,
];

$names['bob'];

И из-за широкого дизайна он не получает всех преимуществ от конкретной структуры данных. Вы можете реализовать свой собственный словарь, расширив ArrayObjectили используя SplObjectStorageкласс, который является реализацией карты (словаря), позволяющей назначать объекты в качестве ключей.

Jsowa
источник
0

Ассоциативный массив в PHP фактически рассматривается как словарь.

Массив в PHP на самом деле является упорядоченной картой. Карта - это тип, который связывает значения с ключами. его можно рассматривать как массив, список (вектор), хеш-таблицу (реализацию карты), словарь , коллекцию, стек, очередь и, возможно, многое другое.

<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// Using the short array syntax
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

Массив отличается от словаря тем, что массивы имеют как индекс, так и ключ. В словарях есть только ключи и нет индекса.

Хагешвор
источник