2015-11-02 111 views
1

场景:如果匹配,则用PHP中另一个数组的值替换数组中的值。多维数组

我有这2个数组

array1

Array 
(
[1] => Array 
    (
     [label] => pending 
     [fillColor] => #468847 
     [data] => 50 
    ) 

[2] => Array 
    (
     [label] => dispatched 
     [fillColor] => #6ecf70 
     [data] => 10 
    ) 

[3] => Array 
    (
     [label] => delivered 
     [fillColor] => #f89406 
     [data] => 1 
    ) 

[4] => Array 
    (
     [label] => invoiced 
     [fillColor] => #3a87ad 
     [data] => 2 
    ) 

) 

array2

Array 
(
[1] => Array 
    (
     [label] => pending 
     [fillColor] => #468847 
     [data] => Array 
      (
       [0] => 1 
      ) 

    ) 

) 

我需要的结果是

Array 
(
[1] => Array 
    (
     [label] => pending 
     [fillColor] => #468847 
     [data] => Array 
      (
       [0] => 50 
       [1] => 1 
      ) 
    ) 

[2] => Array 
    (
     [label] => dispatched 
     [fillColor] => #6ecf70 
     [data] => Array 
      (
       [0] => 10 
       [1] => 0 
      ) 
    ) 

[3] => Array 
    (
     [label] => delivered 
     [fillColor] => #f89406 
     [data] => Array 
      (
       [0] => 1 
       [1] => 0 
      ) 
    ) 

[4] => Array 
    (
     [label] => invoiced 
     [fillColor] => #3a87ad 
     [data] => Array 
      (
       [0] => 2 
       [1] => 0 
      ) 
    ) 

) 

只有4个标签:

  • pending
  • dispatched
  • delivered
  • invoiced

请注意,数组只是一个例子。可能发生的情况是,第一个数组根本没有值,或者只有2个,第二个数组有3个值或没有值。

因为那上面的约束,我想用array_replace并具有阵列的所谓

base_array = ["pending", "dispatched", "delivered", "invoiced"] 

我试图环路base_array和尝试,如果标签存在于array1array2匹配。

基本上,如果键(这是标记)不以任何的array1array2然后存在替换的值将所得数组中为0。

我已经试过

foreach($base_array as $key => $value) { 
    if(in_array($key, $array1[$key])) { 
     $array[$key] = $array1[$key]; 
    } 
} 

,但它看起来像我失去了对这些多维数组和更换。任何帮助将非常感激。谢谢。

+0

你能解释一下你的结果阵列数据的关键?你的预期结果是什么? – rocky

+0

期望的数组结果在上面。谢谢。 –

+0

谢谢你的时间。我已经重写了SQL查询并返回更好的数组。 –

回答

1

从我从你的问题了解你可以做这样的: -

$array = array(
    '1' => Array 
     (
     'label' => 'pending', 
     'fillColor' => '#468847', 
     'data' => '50' 
    ), 
    '2' => Array 
     (
     'label' => 'dispatched', 
     'fillColor' => '#6ecf70', 
     'data' => '10' 
    ), 
    '3 ' => Array 
     (
     'label' => 'delivered', 
     'fillColor' => '#f89406', 
     'data' => '1' 
    ), 
    '4' => Array 
     (
     'label' => 'invoiced', 
     'fillColor' => '#3a87ad', 
     'data' => '2' 
    ), 
); 

$array2 = array 
    (
    '1' => Array 
     (
     'label' => 'pending', 
     'fillColor' => '#468847', 
     'data' => array 
      (
      '0' => '1' 
     ) 
    ) 
); 

$temp = array(); 
$i = 0; 
foreach ($array as $key => $value) { 

    $temp[$key]['label'] = $value['label']; 
    $temp[$key]['fillColor'] = $value['fillColor']; 

    foreach ($array2 as $key2 => $value2) { 

     if ($value['fillColor'] == $value2['fillColor'] && $value['label'] == $value2['label']) { 
      $temp[$key]['data'][] = $value['data']; 
      if (isset($value2['data'][$i])) { 
       $temp[$key]['data'][] = $value2['data'][$i]; 
      } 
     } else { 
      $temp[$key]['data'][] = $value['data']; 
      if (!isset($value2['data'][$i])) { 
       $temp[$key]['data'][] = 0; 
      } 
     } 
     $i++; 
    } 
} 

echo '<pre>'; 
print_r($temp); 
+0

它正在为我给出的数组工作,但不是一般情况。 print_r($ temp)return Array([1] => Array([label] => pending [fillColor] =>#468847 [data] => Array([0] => 50 [1] => 1)) [2] => Array([label] => dispatched [fillColor] =>#6ecf70)[3] => Array([label] => delivered [fillColor] =>#f89406)[4] => Array([标签] =>发票[fillColor] =>#3a87ad)) –

+0

请解释您的预期结果,以便我可以帮助更多 – rocky

+0

预期的临时数组是将“数据”作为一个数组,如果没有找到0。感谢您的时间。我已经重写了SQL查询并返回更好的数组。 –

0

尝试了这一点:

$array1 = array(
    array(
     'label'  => 'pending', 
     'fillColor' => '#468847', 
     'data'  => '50' 
    ), 
    array(
     'label'  => 'dispatched', 
     'fillColor' => '#468847', 
     'data'  => '10' 
    ), 
    array(
     'label'  => 'delivered', 
     'fillColor' => '#468847', 
     'data'  => '8' 
    ), 
    array(
     'label'  => 'invoiced', 
     'fillColor' => '#468847', 
     'data'  => '5' 
    ) 

); 
$array2 = array(
    array(
     'label'  => 'pending', 
     'fillColor' => '#468847', 
     'data'  => array() 
    ), 
    array(
     'label'  => 'dispatched', 
     'fillColor' => '#6ecf70', 
     'data'  => array() 
    ), 
    array(
     'label'  => 'delivered', 
     'fillColor' => '#f89406', 
     'data'  => array() 
    ), 
    array(
     'label'  => 'invoiced', 
     'fillColor' => '#3a87ad', 
     'data'  => array() 
    ) 
); 

foreach ($array1 as $order) { 
    foreach ($array2 as $key => $group) { 
     if ($order['label'] == $group['label']) { 
      array_push($array2[$key]['data'], $order['data']); 
     } 
    } 
} 

var_dump($array2); 
+0

谢谢你的时间。我已经重写了SQL查询并返回更好的数组。顺便说一句,它不工作。 –

+0

代码工程我多次测试https://ideone.com/YyAZKP – Fluinc

+0

它的工作原理,但没有给出预期的结果。见上面的答案。 –