如何将两列表作为数组写?

时间:2011-11-24 07:11:54

标签: php arrays

我有一个包含2个列的简单表:IDName。它看起来像这样:

License_ID      License_Name
   5             xxx
   8             yyy
   13            zzz

我想将此表格编写为数组,并希望在提供license_id时能够找到license_name。我怎么写这个数组?

编辑:我可以像提供的答案昵称一样编写数组,

$array = array(
    'xxx' => 5,
    'yyy' => 8,
    'zzz' => 13
);

但我希望将license_id和license_name作为密钥,而不是使用license_name的值作为密钥。

2 个答案:

答案 0 :(得分:3)

使用与许可证名称对应的键和与许可证ID对应的值形成一个数组,如下所示:

$sql = 'SELECT * FROM table'; // Optionally add a WHERE clause
$result = mysql_query( $sql);
$array = array();
while( $row = mysql_fetch_array( $result))
{
    // Form the array
    $array[ $row['License_Name'] ] = $row['License_ID'];
}
mysql_free_result( $result);

要省略表并使用全局变量,请使用相同的技术:

$array = array(
    'xxx' => 5,
    'yyy' => 8,
    'zzz' => 13
);

现在,要查找许可证ID,您只需要:

$license_id = 8;
$id = $array[ $license_id ]; // $id = 'yyy';

编辑:这是另一种以更清晰的方式表示方式的方法:

$array = array(
    array(
        'license_id' => 5,
        'license_name' => 'xxx'
    ),
    array(
        'license_id' => 8,
        'license_name' => 'yyy'
    ),
    array(
        'license_id' => 13,
        'license_name' => 'zzz'
    )
);

然后,要在提供license_name时找到license_id,请循环查找结果:

$license_name = 'zzz';
foreach( $array as $entry)
{
    if( $entry['license_name'] == $license_name)
    {
        echo 'Found ID of ' . $license_name . ' - ' . $entry['license_id'];
        break;
    }
}

OR,甚至更直接的防止循环的方法是修改上述技术,让每个子数组都包含license_name作为其键,如下所示:

$array = array(
    'xxx' => array(
        'license_id' => 5,
        'license_name' => 'xxx'
    ),
    'yyy' => array(
        'license_id' => 8,
        'license_name' => 'yyy'
    ),
    'zzz' => array(
        'license_id' => 13,
        'license_name' => 'zzz'
    )
);

现在,要查找license_id,您可以在知道license_name后直接执行:

$license_name = 'zzz';
$license_id = $array[ $license_name ]['license_id'];

答案 1 :(得分:0)

你知道那里有array_search,不是吗?我个人喜欢将数组键保存为ids或数值..所以在您的示例中$key=array_search('xxx',$myArr);(其中id是键,名称是值)http://php.net/manual/en/function.array-search.php