如何在PHP数组中定义自定义键?

3

我想定义一个二维数组,像下面这样:

   [40.1][John]
   [40.2][Jane]
   [40.7][Mary]       
   [40.10][Sara]    

换句话说,我想用自定义键定义一个数组。后来我需要使用自定义键访问数组值。例如:

   echo(myarray[40.2]);

我需要动态从XML文件中生成数组,因为这些值来自XML文件。 我要从中生成数组的XML文件如下:

    <rules>

<rule>
    <id>40.1</id>
    <regex><![CDATA[/(?:\)\s*when\s*\d+\s*then)/]]></regex>
</rule>
<rule>
    <id>40.2</id>
    <regex><![CDATA[/(?:"\s*(?:#|--|{))/]]></regex>
</rule>

我该如何创建一个具有上述特征的数组?

3
PHP拥有一个称为字符串的出色内置数据类型,您可以将其用作关联数组中的键名。建议尝试一下。 - Martin Bean
我只能说 $test["40.1"]["john"] = array();,但在看到一些代码并了解您如何检索xml之前,无法做出更多解释。 - The Humble Rat
1
@MartinBean 实际上,PHP 并不知道数据类型:P 一切都只是一堆 C 字符串,在调用时被检测并以最适合操作的方式处理。这使得 PHP 成为一种非常简单和灵活的语言,但也引入了最可怕(有时难以检测)的问题。 - user1467267
Amir,$generatedArray ['40.2']会包含什么? - Dmytro Krasun
3个回答

15
你可以通过创建一个关联数组来轻松地实现这个目标。
$myarray = array(
  "40.1" => "John",
  "40.2" => "Jane",
  "40.7" => "Mary",
  "40.10" => "Sara"
);

稍后您可以使用foreach循环遍历该数组

foreach($myarray as $key => $value) {
  echo "<p>" . $key . " = " . $value . "</p>";
}

这将输出到屏幕上

40.1 = John
40.2 = Jane
40.7 = Mary
40.10 = Sara
创建一个新数组并向其中添加项目就像这样简单。
$myarray = array();
$myarray[$newkey] = $newvalue;

对于一个二维数组,你可以像这样定义它们

$myarray = array();
$myarray[$key] = array();
$myarray[$key]['John'] = 'some value';
$myarray[$key]['Jane'] = 'another value';
$myarray[$key2] = array();
$myarray[$key2]['Mary']= 'yet another value';

或者作为捷径

$myarray = array(
  $key => array(
   'John' => 'some value',
   'Jane' => 'another value',
  ),
  $key2 = array(
   'Mary' => 'yet another value'
  )
);

我说过我需要动态生成数组,因为值和键来自XML文件。 - Amir Sa
1
我已经修改了我的答案来回答那个问题。 - Robbert
@AmirSa 使用变量([40.1][$value])填充关键字段的方式是相同的。它将为处理程序提供一个可以与数组中的该点相关联的字符串。你实际上遇到了什么问题? :) - user1467267
@Robbert,最后一段代码完美运行! - Amir Sa

1
你可以使用关联数组的键 => 值来完成这个任务。
$arr = array('40.1' => 'John', '40.2' => 'Jane', '40.7' => 'Mary', ...);
echo $arr['40.1']; // will return John

如果您希望在未来扩展数据,您可以使用嵌套数组来实现。
$arr = array(
'40.1' => array('name' => 'John', 'eyes' => 'green');
'40.2' => array('name' => 'Jane', 'eyes' => 'blue');
);

你可以这样访问嵌套数组:

echo $arr['40.2']['eyes'] // return blue

你可以在这里查看关于数组的PHP文档 这里


0

数组键

注意!不要将“float”用作数组键的类型。

<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);

输出将是:

array(1) {
  [1]=>
  string(1) "d"
}

摘自http://www.php.net/manual/zh/language.types.array.php

二维数组

您可以像这样创建数组:

$data = [
   '40.2' => [
       'John' => [ 
           // and now this is second dimension
       ] 
   ]
];

添加额外的内容:

$data['40.2']['John'][] = ; // just append value 
// or 
$data['40.2']['John']['sex'] = 'Male'; // store it with key

或者如果您需要存储标量值,您可以像这样定义数组:

$data = [
   '40.2' => [
       'John' => 'male' // storing scalar values  
   ]
];

抱歉,如果我误解了你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接