如何用PHP以这种方式获取数组中的值?

问题描述:

来源:如何用PHP以这种方式获取数组中的值?

$arr = array(array('key1'=>'A',...),array('key1'=>'B',...)); 

到:

array('A','B',..); 
+0

你只是想从每个从每一个阵列内的阵列或所有值的第一个值? – 2009-11-20 04:36:22

相对简单的转换通过循环:

$newArray = array() 
foreach ($arr as $a) { 
    foreach ($a as $key => $value) { 
     $newArray[] = $value; 
    } 
} 

或者,也许更优雅:

function flatten($concatenation, $subArray) { 
    return array_merge($concatenation, array_values($subArray)); 
} 
$newArray = array_reduce($arr, "flatten", array()); 

约翰解决方案也很好。

+0

是否有内置的功能来完成这种工作? – Mask 2009-11-20 04:28:34

+0

我相信没有内置函数来做到这一点。 – 2009-11-20 04:34:24

+0

@Mask,不包含关联数组。否则,您可以使用几个函数之一或“+”运算符创建一个新数组,以创建数组的联合。 – Thomas 2009-11-20 04:38:18

$output = array(); 
foreach ($arr as $array_piece) { 
    $output = array_merge($output, $array_piece); 
} 
return array_values($output); 

在另一方面,如果从每个阵列所需的第一个值,你想要的是......

$output = array(); 
foreach ($arr as $array_piece) { 
    $output[] = array_unshift($array_piece); 
} 

但我想你想的第一个。

像这样的东西应该工作

<? 
$arr = array(array('key1'=>'A','key2'=>'B'),array('key1'=>'C','key2'=>'D')); 

$new_array = array(); 

foreach ($arr as $key => $value) { 
    $new_array = array_merge($new_array, array_values($value)); 
} 

var_export($new_array); 
?> 

如果你希望你的主阵列中的每个阵列中的所有值。

function collapse($input) { 
    $buf = array(); 
    if(is_array($input)) { 
     foreach($input as $i) $buf = array_merge($buf, collapse($i)); 
    } 
    else $buf[] = $input; 
    return $buf; 
} 

以上是修改unsplat功能,也可用于:

function unsplat($input, $delim="\t") { 
    $buf = array(); 
    if(is_array($input)) { 
     foreach($input as $i) $buf[] = unsplat($i, $delim); 
    } 
    else $buf[] = $input; 
    return implode($delim, $buf); 
} 
$newarray = explode("\0", unsplat($oldarray, "\0"));