HTTP post数组与PHP的合并


HTTP post array merging with PHP

我有以下问题:

我有以下输入:

<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');