Php 获取数组的第一个元素

Php 获取数组的第一个元素,php,arrays,Php,Arrays,我有一个数组: array(4=>apple',7=>orange',13=>plum') 我想得到这个数组的第一个元素。预期结果:字符串apple 一个要求:不能通过引用传递,因此array\u shift不是一个好的解决方案 我该怎么做 $arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' ); echo reset($arr); // echoes 'apple' 如果不想丢失当前指针位置,只需

我有一个数组:

array(4=>apple',7=>orange',13=>plum')

我想得到这个数组的第一个元素。预期结果:字符串
apple

一个要求:不能通过引用传递,因此
array\u shift
不是一个好的解决方案

我该怎么做

$arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'
如果不想丢失当前指针位置,只需为数组创建别名即可。

一种笨拙的方法是:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);

我认为在这里使用是你最好的选择。您可以从该函数的结果返回索引0处的值以获得“apple”。

原始答案,但代价很高(O(n)):

在O(1)中:

其他用例等。

如果修改
$array
不是问题(在重置数组指针的意义上),您可以使用:

reset($array);
如果需要阵列“拷贝”,理论上这应该更有效:

array_shift(array_slice($array, 0, 1));
使用PHP5.4+(如果为空,可能会导致索引错误):

正如Mike指出的(最简单的方法):

如果要获取密钥:(重置后执行)

发件人:

混合重置(数组和$array)

说明:

reset()将数组的内部指针倒回到第一个元素,并返回第一个数组元素的值,如果数组为 空的

使用:


默认情况下,
array\u slice
不保留键,因此我们可以安全地使用零作为索引。

您可以使用语言构造“list”获取第n个元素:

使用
array\u keys
功能,您可以对键执行相同的操作:

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);
输出:

apple
你有两个解决方案

解决方案1-只需使用该键。您没有说过您不能使用它。:)


有些数组不能与
列表
重置
当前
等函数一起使用。也许它们是“人造”数组——例如,部分实现了ArrayIterator

如果要提取第一个值而不考虑数组,可以短路迭代器:

foreach($array_with_unknown_keys as $value) break;
您的值将在
$value
中可用,循环将在第一次迭代后中断。这比将可能较大的数组复制到诸如array\u unshift(array\u values($arr))之类的函数更有效

您也可以通过这种方式抓取钥匙:

foreach($array_with_unknown_keys as $key=>$value) break;
如果您是从函数调用此函数,只需提前返回:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}
假设:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
只需使用:

$array[key($array)]
获取第一个元素或

key($array)
要拿到第一把钥匙


或者,如果要删除第一个,可以取消链接。

我会执行
回波电流($array)

只要做:

array_shift(array_slice($array,0,1));

这对游戏来说有点晚了,但是我遇到了一个问题,我的数组中包含了作为子元素的数组元素,因此我不能只获得第一个数组元素的字符串表示。到年,我做到了:

<?php
    $original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

感谢所有当前的解决方案帮助我得到了这个答案,我希望这有助于某些人

PHP5.4+:

这比
array\u values()
有效得多,因为
each()
函数不会复制整个数组


有关更多信息,请参阅这些工作的大部分!但对于快速的单线(低资源)呼叫:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)
apple
apple
虽然这样做很有效,也很不错,但请参阅我的补充答案:

当前($array)

返回数组的第一个元素

每个数组都有一个指向其“当前”元素的内部指针,该元素被初始化为插入数组的第一个元素

因此,它会一直工作,直到您重新定位数组指针,否则您必须使用
reset()
,它将倒带数组并返回数组的第一个元素

reset()将数组的内部指针倒带到第一个元素,并返回第一个数组元素的值

current()
reset()

$array=array(“第一步”、“第二步”、“第三步”、“第四步”);
//默认情况下,指针位于第一个元素上
回波电流($阵列)。“
\n”//“第一步” //转发数组指针,然后重置它 //跳过两步 下一个($数组); 下一个($数组); 回波电流($阵列)。“
\n”//“第三步” //重置指针,重新开始第一步 回波重置($array)。“
\n”//“第一步”
我想作者只是想寻找一种方法,在从某个函数(例如)获取数组的第一个元素后,获取该元素,而不生成严格的“仅应通过引用传递变量”

如果是这样的话,这里描述的几乎所有方法都会得到这个消息。。。它们中的一些使用了大量额外的内存来复制数组(或其中的一部分)。避免这种情况的一种简单方法是,在调用这些函数之前,只需内联赋值:

$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());

这样,您就不会在屏幕上或日志中获得严格的消息,也不会创建任何额外的数组。它可与索引数组和关联数组一起使用。

使用
数组_keys()
以数字索引数组的形式访问关联数组的键,然后该数组可以再次用作数组的键

当解决方案为
arr[0]
时:

(注意,由于带有键的数组是基于0的索引,因此第一个 元素是索引(0)

您可以使用一个变量,然后减去一个,以得到逻辑,即
1=>“apple”

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];
输出:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)
apple
apple
为了简单起见,只需使用:

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[0]];
输出:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)
apple
apple

通过第一种方法,不仅可以使用第一个元素,还可以将关联数组视为索引数组。

我不喜欢摆弄数组的内部指针,但使用
数组键()
数组值()
构建第二个数组也很低效,因此我通常定义如下:

function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}
获取第一个元素:

array_values($arr)[0]
获取最后一个元素

array_reverse($arr)[0]
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// The first element of your array is:
echo $myArray[$arrayKeys[0]];
$array = array('step one', 'step two', 'step three', 'step four');

// by default, the pointer is on the first element
echo current($array) . "<br />\n"; // "step one"

//Forward the array pointer and then reset it

// skip two steps
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"

// reset pointer, start again on step one
echo reset($array) . "<br />\n"; // "step one"
$first_item_of_array = current($tmp_arr = mysql_fetch_row(...));
// or
$first_item_of_array = reset($tmp_arr = func_get_my_huge_array());
$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];
apple
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[0]];
apple
function array_first(array $f) {
    foreach ($f as $v) {
        return $v;
    }
    throw new Exception('array was empty');
}
array_values($arr)[0]
array_reverse($arr)[0]
function head($array)
{
    return reset($array);
}
$data = ['foo', 'bar', 'baz'];

current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz
function head($array, $default = null)
{
    foreach ($array as $item) {
        return $item;
    }
    return $default;
}
$array = array
(
   '1'           => 'PHP code test',  
   'foo'         => 'bar', 5 , 5 => 89009, 
   'case'        => 'Random Stuff: '.rand(100,999),
   'PHP Version' => phpversion(),
   0             => 'ending text here'
);

var_dump(current($array));
$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];
$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];
$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$first_element = (new ArrayIterator($array))->current();
echo $first_element; //'apple'
<?php
if (!function_exists('array_key_first')) {
    function array_key_first($arr) {
        foreach($arr as $key => $unused) {
            return $key;
        }
        return NULL;
    }
}

if (!function_exists('array_key_last')) {
    function array_key_last($arr) {
        return array_key_first(array_reverse($arr, true));
    }
}
?>