在PHP数组中向1个键添加2个值

在PHP数组中向1个键添加2个值,php,arrays,Php,Arrays,我有一个数据结果集,我想在php中写入数组。以下是我的示例数据: **Name** **Abbrev** Mike M Tom T Jim J 使用这些数据,我想在php中创建一个数组,它具有以下特性: 1|Mike|M 2|Tom|T 3|Jim|j 1|Mike 2|M 3|Tom 4|T 5|Jim 6|J 我尝试了array_push($values,'name,'缩写')[pseudo code],这给了我以下信息: 1|Mike|M 2|Tom|T

我有一个数据结果集,我想在php中写入数组。以下是我的示例数据:

**Name** **Abbrev**
Mike     M
Tom      T
Jim      J
使用这些数据,我想在php中创建一个数组,它具有以下特性:

1|Mike|M
2|Tom|T
3|Jim|j
1|Mike
2|M
3|Tom
4|T
5|Jim
6|J
我尝试了array_push($values,'name,'缩写')[pseudo code],这给了我以下信息:

1|Mike|M
2|Tom|T
3|Jim|j
1|Mike
2|M
3|Tom
4|T
5|Jim
6|J
如果我查找“Mike”或“M”,我需要查找这个数组以获得相同的键值


在名称和缩写共享同一个键的情况下,将我的结果集写入上面设置的数组的最佳方法是什么?

必须为键的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]
或:

诀窍是使用嵌套数组将每个条目中的名称和缩写配对

$person = array('name' => 'Mike', 'initial' => 'M');
array_push($people, $person);

也就是说,我不知道为什么要单独存储数据。可以通过
substr($name,0,1)

直接从名称中获取首字母,php数组的工作方式类似于哈希查找表,因此为了获得所需的结果,可以初始化两个键,一个键使用实际值,另一个键使用指向第一个键的引用。例如,你可以做:

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

您可以使用两个单独的阵列,可能类似于:

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

因此,您使用两个数组,第二列和第三列各一个,使用第一列中的值作为两个数组的键。

您需要创建一个二维数组来存储多个值

结果集中的每一行都已经是一个数组,因此需要将其作为数组添加到变量中

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/>";
}
班级人员
{
公共名称;
脉冲函数构造($name)
{
$this->name=(字符串)$name;
}
公共函数getAbbrev()
{
返回substr($this->name,0,1);
}
公共功能获得($prop)
{
如果($prop=='abbrev'){
返回$this->getAbbrev();
}
}
}
$persons=数组(
新人(“迈克”),
新人(“汤姆”),
新人(“吉姆”)
);
foreach($人作为$人){
回显“$person->name($person->abbrev.)
”; }
基本上,他是说需要使用多维数组。数据数组应包含数字作为键,数组作为值。数组作为值包含一个键中的名称和另一个键中的值。这两个键应该是预定义的(0和1/name和initial/n和i/etc)。感谢您关于直接获取缩写的建议,但您的建议仅适用于我的简化示例集。这个建议对我的真实数据集不起作用,因为缩写实际上是更多的字符,并不总是在名称中的字符集内。PS:在PHP中,键的索引从零开始(与大多数语言一样),因此第一个键值对将具有键0;第二个键值对将具有键1;第三个键值对将具有键2;等