2012-07-31 35 views
0

Althoug这个工作得很好,我很好奇,如果有人知道这样做的更漂亮的方式,因为这种情况似乎经常出现。把多维数组向下(unnest)一个级别

<?php 
//Initialy, data is nested up in $some_array[0] ... 
$some_array = array(array('somevar' => "someValue", "someOtherVar" => "someOtherValue")); 

print_r($some_array); 

阵列([0] =>数组([somevar] => someValue中[someOtherVar] => someOtherValue))

// Could the following line be achieved a more elegant fashion? 
$some_array = $some_array[0]; 

print_r($some_array); 

// Prints the intended result: 

阵列([somevar] => someValue中[someOtherVar] => someOtherValue)

有没有人知道用本机功能或更优雅的方式来实现这一点?

谢谢!

+0

使用'$ some_array = $ some_array [0];'?有什么问题?对我来说这似乎很好... – Jocelyn 2012-07-31 01:25:12

+0

请定义“更优雅”。此外,为什么你的数据如果你追求高雅,首先不会更优雅?本地函数被称为['reset'](http://php.net/reset)btw。 – hakre 2012-07-31 05:46:13

+0

@hakre - 更优雅的是有一个本地函数返回数组的第一个元素,就像current()似的。在重新讨论这一点时,我倾向于赞成我最初的代码示例的可读性,正如人们可以半睁一眼就能看到的一样,而不用考虑发生了什么。 数据以这种方式构造,因为它是框架回调的返回值。 PS:复位需要与current()一起使用。在我的情况下,复位有点多余,因为我可以在函数调用后立即调用current()。 – stefgosselin 2012-07-31 15:56:00

回答

1

你可以使用current(解释为here),它基本上指向数组中的第一个元素并返回它。

要绝对确保你得到的第一个元素,您应该重置阵列,像这样:

reset($arr) 
$firstElement = current($arr) 
+1

['reset'](http://php.net/reset)也会返回,所以'$ first = reset($ array);'应该就够了。 – hakre 2012-07-31 05:47:57

+0

对于一个真正的(非关联)数组'reset'就足够了。但在php.net文档中,它在用户评论中提到,这对于关联数组不起作用,这就是为什么我添加了“current”调用。 – Mekswoll 2012-07-31 18:31:17

1

你正在寻找被称为本地函数resetDemo):

$some_array = reset($some_array); 

明确的说明:current是没有必要的。