У меня есть набор результатов данных, которые я хочу записать в массив в php. Вот мои демонстрационные данные:
**Name** **Abbrev**
Mike M
Tom T
Jim J
Используя те данные, я хочу создать массив в php, который имеет следующее:
1|Mike|M
2|Tom|T
3|Jim|j
Я попробовал array_push ($values, 'имя', 'сокращение') [псевдо код], который дал мне следующее:
1|Mike
2|M
3|Tom
4|T
5|Jim
6|J
Я должен привести в порядок взгляд против этого массива для получения того же значения ключа, если я ищу "Mike" или "M".
Что лучший способ состоит в том, чтобы записать моему набору результатов в массив, как установлено выше, где имя и сокращение совместно используют тот же ключ?
PHP не мой любимый язык, но попробуйте следующие:
array_push($values, array("Mike", "M"))
array_push($values, array("Tom", "T"))
array_push($values, array("Jim", "J"))
$name1 = $values[1][0]
$abbrev1 = $values[1][1]
или:
array_push($values, array("name" => "Mike", "abbrev" => "M"))
array_push($values, array("name" => "Tom", "abbrev" => "T"))
array_push($values, array("name" => "Jim", "abbrev" => "J"))
$name1 = $values[1]["name"]
$abbrev1 = $values[1]["abbrev"]
Уловка состоит в том, чтобы использовать вложенный массив для объединения имен и сокращений в каждой записи.
$person = array('name' => 'Mike', 'initial' => 'M');
array_push($people, $person);
Тем не менее, я не уверен, почему вы храните данные отдельно. Инициалы можно получить непосредственно из имени через substr($name, 0, 1)
.
Массивы php работают как хеш-справочные таблицы, поэтому для достижения желаемого результата вы можете инициализировать 2 ключа, один с фактическим значением, а другой со ссылкой на первый. Например, вы могли бы сделать:
$a = array('m' => 'value');
$a['mike'] = &$a['m']; //notice the end to pass by reference
, если вы попробуете:
$a = array('m' => 'value');
$a['mike'] = &$a['m'];
print_r($a);
$a['m'] = 'new_value';
print_r($a);
$a['mike'] = 'new_value_2';
print_r($a);
, результат будет:
Array
(
[m] => value
[mike] => value
)
Array
(
[m] => new_value
[mike] => new_value
)
Array
(
[m] => new_value_2
[mike] => new_value_2
)
Вам нужно будет создать двумерный массив для хранения более одного значения.
Каждая строка в вашем наборе результатов уже является массивом, поэтому ее нужно будет добавить в вашу переменную как массив.
array_push($values, array('name', 'abbreviation'));
возможно, вы создадите для этого простой класс, поскольку в вашем случае сокращение является избыточной информацией
class Person
{
public $name;
pulbic function __construct($name)
{
$this->name = (string)$name;
}
public function getAbbrev()
{
return substr($this->name, 0, 1);
}
public function __get($prop)
{
if ($prop == 'abbrev') {
return $this->getAbbrev();
}
}
}
$persons = array(
new Person('Mike'),
new Person('Tom'),
new Person('Jim')
);
foreach ($persons as $person) {
echo "$person->name ($person->abbrev.)<br/>";
}
нужно установить одинаковое значение для клавиш Mike и M.
Вы можете использовать два отдельных массива, например:
$values_names = array();
$values_initials = array();
array_push($values_names, 'Mike');
array_push($values_initials, 'M');
array_push($values_names, 'Tom');
array_push($values_initials, 'T');
array_push($values_names, 'Jim');
array_push($values_initials, 'J');
Итак, вы используете два массива, по одному для каждого из второго и третьего столбцов, используя значения в первом как ключи для обоих массивов.