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 和索引来执行它并不是一个好方法。 :(
我想将其合并到:
'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 是你的数组,然后 $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 < php 5 ,数组列函数还没有,所以使用这个:
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[at]gmail.com 的评论 here //更短的函数
array_walk($array, function(&$value, $key, $return) {
$value = $value[$return];
}, 'foo');
我有以下问题:
我有以下输入:
<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 和索引来执行它并不是一个好方法。 :(
我想将其合并到:
'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 是你的数组,然后 $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 < php 5 ,数组列函数还没有,所以使用这个:
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[at]gmail.com 的评论 here //更短的函数
array_walk($array, function(&$value, $key, $return) {
$value = $value[$return];
}, 'foo');