我有以下问题:
我有以下输入:
<input type="text" name="name[]" ...
<input type="text" name="qty[]" ...
<input type="text" name="value[]" ...
我张贴后收到的是:
'name' =>
array (size=3)
0 => string 'Book One' (length=8)
1 => string 'Book Two' (length=8)
2 => string 'Book Three' (length=10)
'qty' =>
array (size=3)
0 => string '1' (length=1)
1 => string '3' (length=1)
2 => string '1' (length=1)
'value' =>
array (size=3)
0 => string '10' (length=5)
0 => string '30' (length=5)
0 => string '25' (length=5)
正因为如此,我不能真正做foreach,用for和index做foreach不是一个好方法。:(
我想将其合并为:
'items' =>
array (size=3)
0 => array('name' => 'Book One', 'qty' => '1', 'value' => '10')
1 => array('name' => 'Book Two', 'qty' => '3', 'value' => '30')
2 => array('name' => 'Book Three', 'qty' => '1', 'value' => '25')
有什么好方法吗?
我仍然在数组上运行foreach
$r = array(
'name' => array (
0 => 'Book One',
1 => 'Book Two',
2 => 'Book Three'
),
'qty' => array(
0 => '1',
1 => '3',
2 => '1'
),
'value' => array(
0 => '10',
1 => '30',
2 => '25'
)
);
$i=0;
$e=array();
$ehh = array_keys($r);
foreach ($r as $k) {
$e[] = array_combine($ehh, array_column($r,$i));
$i++;
}
echo "<pre>";
print_r($e);
echo "</pre>";
$r是yr数组,然后$ehh将其密钥存储一段时间。每个循环获取相应的列,并将其与键值组合。产品:
Array
(
[0] => Array
(
[name] => Book One
[qty] => 1
[value] => 10
)
[1] => Array
(
[name] => Book Two
[qty] => 3
[value] => 30
)
[2] => Array
(
[name] => Book Three
[qty] => 1
[value] => 25
)
)
如果yr<php5,数组列函数还没有,所以使用这个:
function array_column($a=null,$b=null,$c=null){$argc=func_num_args();$d=func_get_args();if($argc<2){trigger_error("array_column() expects at least 2 parameters, {$argc} given",E_USER_WARNING);return null;}if(!is_array($d[0])){trigger_error('array_column() expects parameter 1 to be array, '.gettype($d[0]).' given',E_USER_WARNING);return null;}if(!is_int($d[1])&&!is_float($d[1])&&!is_string($d[1])&&$d[1]!==null&&!(is_object($d[1])&&method_exists($d[1],'__toString'))){trigger_error('array_column(): The column key should be either a string or an integer',E_USER_WARNING);return false;}if(isset($d[2])&&!is_int($d[2])&&!is_float($d[2])&&!is_string($d[2])&&!(is_object($d[2])&&method_exists($d[2],'__toString'))){trigger_error('array_column(): The index key should be either a string or an integer',E_USER_WARNING);return false;}$e=$d[0];$f=($d[1]!==null)?(string) $d[1]:null;$g=null;if(isset($d[2])){if(is_float($d[2])||is_int($d[2])){$g=(int) $d[2];}else{$g=(string) $d[2];}}$h=array();foreach($e as $i){$j=$k=null;$l=$m=false;if($g!==null&&array_key_exists($g,$i)){$l=true;$j=(string) $i[$g];}if($f===null){$m=true;$k=$i;}elseif(is_array($i)&&array_key_exists($f,$i)){$m=true;$k=$i[$f];}if($m){if($l){$h[$j]=$k;}else{$h[]=$k;}}}return $h;}
或者:来自robbieaverill在gmail.com/shorter function 上的评论
array_walk($array, function(&$value, $key, $return) {
$value = $value[$return];
}, 'foo');