Добавьте, что 2 значения к 1 вводят массив PHP

У меня есть набор результатов данных, которые я хочу записать в массив в 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".

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

10
задан hakre 24 December 2012 в 23:13
поделиться

7 ответов

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"]

Уловка состоит в том, чтобы использовать вложенный массив для объединения имен и сокращений в каждой записи.

18
ответ дан 3 December 2019 в 17:19
поделиться
$person = array('name' => 'Mike', 'initial' => 'M');
array_push($people, $person);

Тем не менее, я не уверен, почему вы храните данные отдельно. Инициалы можно получить непосредственно из имени через substr($name, 0, 1).

5
ответ дан 3 December 2019 в 17:19
поделиться

Массивы 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
)
-1
ответ дан 3 December 2019 в 17:19
поделиться

Вам нужно будет создать двумерный массив для хранения более одного значения.

Каждая строка в вашем наборе результатов уже является массивом, поэтому ее нужно будет добавить в вашу переменную как массив.

array_push($values, array('name', 'abbreviation'));
2
ответ дан 3 December 2019 в 17:19
поделиться

возможно, вы создадите для этого простой класс, поскольку в вашем случае сокращение является избыточной информацией

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/>";
}
1
ответ дан 3 December 2019 в 17:19
поделиться

нужно установить одинаковое значение для клавиш Mike и M.

-3
ответ дан 3 December 2019 в 17:19
поделиться

Вы можете использовать два отдельных массива, например:

$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');

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

1
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

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