У меня есть результирующий набор данных, который я хочу записать в массив в php. Вот мои данные:
**Name** **Abbrev** Mike M Tom T Jim J
Используя эти данные, я хочу создать массив в php, который имеет следующий вид:
1|Mike|M 2|Tom|T 3|Jim|j
Я попробовал array_push ($ values, 'name', 'abbreviation') [псевдокод], который дал мне следующее:
1|Mike 2|M 3|Tom 4|T 5|Jim 6|J
Мне нужно взглянуть на этот массив, чтобы получить то же ключевое значение, если я посмотрю «Майк» или «М».
Каков наилучший способ записи моего набора результатов в массив, как указано выше, где имя и аббревиатура разделяют один и тот же ключ?
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)
.
Вам нужно будет создать двухмерный массив для хранения более одного значения.
Каждая строка в вашем результирующем наборе уже является массивом, поэтому ее нужно будет добавить в вашу переменную в виде массива.
array_push($values, array('name', 'abbreviation'));
Вы можете использовать два отдельных массива, возможно, например:
$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');
Таким образом, вы используете два массива, по одному для каждого из второго и третьего столбцов, используя значения в первом как ключи для обоих массивов.
возможно, вы создаете для этого простой класс, поскольку аббревиатура представляет собой избыточную информацию в вашем случае
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/>"; }
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 )
должны установить одно и то же значение для Mike и M для ключей.