如何用PHP以这种方式获取数组中的值?
问题描述:
$arr = array(array('key1'=>'A',...),array('key1'=>'B',...));
到:
array('A','B',..);
答
相对简单的转换通过循环:
$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());
约翰解决方案也很好。
答
$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"));
你只是想从每个从每一个阵列内的阵列或所有值的第一个值? – 2009-11-20 04:36:22