2017-06-24 44 views
0

我想两个数组与他们的钥匙和价值观结合起来,和我有下面的PHP代码:组合键和值从两个数组成组

foreach ($_POST['id'] as $key => $value) { 
    $id_array[] = $value; 
    //$array1[] = $update_array; 
} 

$id_array = array_fill_keys($id_array, 'id'); 
// var_dump($array1); 
// exit(); 

foreach ($_POST['hruleid'] as $rkey => $rvalue) { 
    $rule_array[] = $rvalue; 
} 

$rule_array = array_fill_keys($rule_array, 'ruleid'); 
// $result = array(); 
// foreach ($id_array as $i => $val) { 
//  $result[] = array($val, $rule_array[$i]); 
// } 

echo "<pre>"; 
print_r($id_array); 
echo "<pre>"; 
print_r($rule_array); 
exit(); 

其出放为:

Array 
(
    [12] => id 
    [15] => id 
    [13] => id 
    [16] => id 
) 
Array 
(
    [0] => ruleid 
    [1] => ruleid 
    [2] => ruleid 
    [3] => ruleid 
) 

我希望它是这样的:

Array 
(
[0] => Array 
    (
     [id] => 12 
     [ruleid] => 0 
    ) 

[1] => Array 
    (
     [id] => 15 
     [ruleid] => 1 
    ) 
[2] => Array 
    (
     [id] => 13 
     [ruleid] => 2 
    ) 
[3] => Array 
    (
     [id] => 16 
     [ruleid] => 3 
    ) 
) 

我在注释代码试了一下像,但它显示的是一个错误。我究竟做错了什么?

+0

尝试array_m erge:http://php.net/manual/en/function.array-merge.php –

+0

我试过arraya_merge ...它给我喜欢阵列 阵列( [0] => ID [1] => ID [2] => ID [3] => ID [4] => ruleid [5] => ruleid [6] => ruleid [7] => ruleid ) –

+1

试试@bhavin thummar答案...我认为是解决这个问题的最佳方案。 –

回答

3

使用foreach合并为您预期的结果

更新1:你的代码的简化版本

if(count($_POST['id'])==count($_POST['hruleid'])) 
{ 

    foreach ($_POST['id'] as $key => $value) 
    { 

     $new_array[] = array('id'=>$value,'rule_id'=>$_POST['hruleid'][$key]); 

    } 


} 

旧更新:

<?php 

$id_array = Array(12,15,13,16); 
$rule_array = Array (0,1,2,3); 

foreach($id_array as $key=>$row) 
{ 
    $new_array[]= array('id'=>$row,'rule_id'=>$rule_array[$key]); 
} 

print_r($new_array); 


?> 

:以上代码如果两个阵列都有相同的密钥和相同的阵列数

2

嘿请检查此解决方案。这是正确的解决方案,有两个数组,一个是数据,另一个是最终数据。最终数据存储数据数组的值。这个逻辑被用在web服务中。

<?php 


     $data = array(); 
     $final_data = array(); 

     extract($_POST); 

     for ($i=0; $i <sizeof($id) ; $i++) { 

      $data['id'] = $id[$i]; 
      $data['ruleid'] = $hruleid[$i]; 
      $final_data[] = $data; 
     } 


     echo '<pre>'; 
     print_r($final_data); 
     echo '</pre>'; 
?> 
1

只是尝试这种

foreach ($_POST['id'] as $key => $value) { 
     $id_array[] = $value; 
    } 
    foreach ($_POST['hruleid'] as $rkey => $rvalue) { 
     $rule_array[] = $rvalue; 
    } 
    $final=[]; 
    foreach ($id_array as $key=>$id){ 
     $final[]=['id'=>$id,'ruleid'=>(isset($rule_array[$key]))?$rule_array[$key]:'']; 
    } 

如果数组类似于

$id_array=[11,21,13,14]; 
$rule_array=[2,3,5,6]; 

上面的代码将返回值一样

enter image description here

1

更改你的PHP小号这一个CRIPT,无需array_fill()

$id_array=[]; 
$rule_array=[]; 
foreach ($_POST['id'] as $key => $value) { 
    $id_array[] = $value;//it will be $id_array=[11,21,13,14]; 
} 
foreach ($_POST['hruleid'] as $rkey => $rvalue) { 
    $rule_array[] = $rvalue;////it will be $rule_array=[2,3,5,6]; 
} 

$arr=[]; 
for($i=0;$i<4;$i++) 
{ 
    $temp=[]; 
    $temp['id']=$id_array[$i]; 
    $temp['ruleid']=$rule_array[$i]; 
    array_push($arr,$temp); 
} 
echo "<pre>";print_r($arr); 

一个工作小提琴的是这里php fiddle

0

脚本

[email protected]:/tmp$ cat test.php 
<?php 

$arr1=array(
    12 => 'id', 
    15 => 'id', 
    13 => 'id', 
    16 => 'id', 
); 
$arr2 =array(
    0 => 'ruleid', 
    1 => 'ruleid', 
    2 => 'ruleid', 
    3 => 'ruleid', 
); 

print_r( 
    array_map(
     function($a,$b){ return array('id'=>$a,'ruleid'=>$b); }, 
     array_keys($arr1), 
     array_keys($arr2) 
    ) 
); 

?> 

输出

[email protected]:/tmp$ php test.php 
Array 
(
    [0] => Array 
     (
      [id] => 12 
      [ruleid] => 0 
     ) 

    [1] => Array 
     (
      [id] => 15 
      [ruleid] => 1 
     ) 

    [2] => Array 
     (
      [id] => 13 
      [ruleid] => 2 
     ) 

    [3] => Array 
     (
      [id] => 16 
      [ruleid] => 3 
     ) 

) 
相关问题