在PHP数组中向1个键添加2个值
我有一个数据结果集,我想在php中写入数组。以下是我的示例数据:在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
**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;等