使用关联索引和编号索引访问数组元素

时间:2010-11-30 16:51:29

标签: php arrays

是否可以定义一个数组,我可以通过它们的字符串和数字索引来访问元素?

4 个答案:

答案 0 :(得分:7)

array_values()将返回数组中的所有值,其索引将替换为数字值。

http://php.net/array-values

$x = array(
    'a' => 'x',
    'b' => 'y'
);
$x2 = array_values($x);

echo $x['a']; // 'x'
echo $x2[0]; // 'x'

另一种方法是建立一组参考索引。

function buildReferences(& $array) {
    $references = array();
    foreach ($array as $key => $value) {
        $references[] =& $array[$key];
    }
    $array = array_merge($references, $array);
}

$array = array(
    'x' => 'y',
    'z' => 'a'
);

buildReferences($array);

请注意,只有在您不打算添加或删除索引时才能执行此操作。您可以编辑它们。

答案 1 :(得分:3)

你可以这样做。

$arr = array(1 => 'Numerical', 'two' => 'string');
echo $arr[1]; //Numerical
echo $arr['two']; //String

答案 2 :(得分:3)

PHP允许混合使用字符串和数字索引元素。

$array = array(0=>'hello','abc'=>'world');

echo $array[0]; // returns 'hello'
echo $array['0']; // returns 'hello'
echo $array['abc']; // returns 'world';
echo $array[1]; // triggers a PHP notice: undefined offset

仔细查看最后一项$array[1],可以发现它不等同于数组的第二个元素。

答案 3 :(得分:3)

martswite的回答是正确的,虽然如果你已经有一个关联数组,它可能无法解决你的问题。以下是丑陋的黑客来解决这个问题 - 应该不惜一切代价避免:

$a = array(
'first' => 1,
'second' => 2,
'third' => 3
 );
 $b=array_values($a);

 print $b[2];