如何在PHP中访问数组的第N个元素

19

很尴尬地问一下,这可能是一个重复的问题,但我的谷歌搜索结果不太理想(我猜是我搜索方式不对),这样一个基本的问题让我感到恼火。

我有一个包含未知值的数组。

在Java中,如果要查看第二个条目,我会使用类似于

var = array[1]

我了解PHP数组是键值对,但我该如何简单地查看数组中的第n个值以查看其键值对,甚至更好的是,然后仅访问键/值?


3
PHP默认情况下将整数作为键,从0开始。 - Clément Malet
2
数组可能是真正的数组,也可能是哈希映射表;这是一种类型适用于两者,而且,是非常令人困惑的。没有内置的方法来检查这个(参见:https://dev59.com/5HVC5IYBdhLWcg3w1Etq?rq=1)。请注意,一些函数/操作可以将“数组”转换为“哈希映射表”,反之亦然...在我看来,“数组”类型是该语言的主要设计缺陷之一... - Martin Tournoij
@Clément Andraud - 当我使用 var_dump 或 console.log 时,我只能得到“Array”的输出。如果我使用 count($array) ,我会得到类似“35”的输出。因此,我知道有值存在,但我无法弄清如何访问它们。 - myol
2
你不能使用console.log输出PHP数组 - 你必须在你的PHP代码中使用var_dump($array)或print_r($array),将$array变量名替换为实际保存数组的变量名。 - Jay Blanchard
Jay Blanchard - 我不知道,谢谢。有没有一种好的方式来格式化输出?我只是得到了一堵代码墙.. - myol
1
<pre><?php var_dump($arr); ?></pre> - deceze
3个回答

41

如果你的键是数字,那么它的工作方式完全相同:

$arr = ['one', 'two', 'three']; // equivalent to [0 => 'one', 1 => 'two', 2 => 'three']
echo $arr[1]; // two

如果你的键不是数字或者不是连续的数字,那就有点棘手了:

$arr = ['one', 'foo' => 'bar', 42 => 'baz'];

如果您知道您想要的密钥

echo $arr['foo']; // bar

然而,如果你只知道偏移量,你可以尝试这样做:

$keys = array_keys($arr);
echo $arr[$keys[1]];

或者对数组进行数字重新索引:

$values = array_values($arr);
echo $values[1];

或者把它切片:

echo current(array_slice($arr, 1, 1));

最有可能的情况是您想要循环遍历这个数组,因为这通常是处理未知内容数组的方式。如果内容是未知的,那么您对特定偏移量感兴趣似乎有些奇怪。

foreach ($arr as $key => $value) {
    echo "$key: $value", PHP_EOL;
}

谢谢。我使用了'$keys = array_keys($arr); echo $arr[$keys[1]];' - myol
我只想要一个的原因是,遍历所有的会导致页面崩溃。 - myol
2
那么你可能做错了其他事情。简单的迭代不应该导致崩溃。 - deceze
array_slice很好用,但key()是针对$preserve_keys = TRUE的布尔值;-) - GDmac

1
如果您想访问每个第N个元素:
$n = 3;
foreach (array_keys($arr) as $i => $key) {
    if (($i+1) % $n) {
        continue;
    }

    $value = $arr[$key];
}

1
如果你想访问第n个元素但不知道索引,你可以使用 next() n 次来到达第n个元素。
for($i = 0; $i<$n; $i++){
    $myVal = next();
}
echo $myVal;

已经由@deceze提到了其他访问特定元素的方法。


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