簡體   English   中英

我應該怎么做才能在php中獲得像這樣的數組?

[英]what should i do to get array like this in php?

我有一個數組如下:

Array
(
 [Sep] => Array
    (
        [Support Help Desk] => 24.67
        [Development] => 7.74
        [Consulting Services] => 4.04
    )

[Oct] => Array
    (
        [Support Help Desk] => 14.38
        [Business Activity] => 1.92
        [Maintenance Tasks] => 1.00
        [Development] => 2.11
    )

)

我想要這樣的數組:

   Array
    (
        [Support Help Desk] => 24.67,14.38
        [Development] => 7.74,2.11           
        [Consulting Services] => 4.04,0
        [Business Activity] => 0,1.92
        [Maintenance Tasks] => 0,1.00
    )    

我在zend框架中使用php。 但是我不知道我應該使用什么方法來獲得像這樣的數組?

誰能指導我?

-

提前致謝。

第三次幸運! 我最初在這個問題上錯過了一些微妙之處。 嘗試以下代碼-有點循環,但它應該對您有用。

我假設您的原始數組稱為$data

// first we need to 'normalise' or fill in the blanks in the contents of the sub array
// get a unique list of all the keys shared - doing it manually here

$keys = ['Support Help Desk', 'Business Activity', 'Maintenance Tasks', 'Development', 'Consulting Services'];

// create a default array with $keys, assigning 0 as the value of each

$default = array_fill_keys($keys, 0);

// next fill in the blanks...
// get the diff (missing keys) between the current element and the default array
// merge the missing key/value pairs

array_walk($data, function(&$month, $key, $default) {
    $diff = array_diff_key($default, $month);
    $month = array_merge($diff, $month);
}, $default);


// now the array is normalised
// flatten the array... where there are duplicate values for a key, and
// there will be in all cases now including default values
// a sub array is created

$merged = call_user_func_array('array_merge_recursive', $data);

// finally loop over the merged array
// and implode each array of values into a comma separated list

foreach ($merged as &$element) {
    if (is_array($element)) {
        $element = implode(', ', $element);
    }
}

// done :)

var_dump($merged);

產量:

array (size=5)
  'Business Activity' => string '0, 1.92' (length=7)
  'Maintenance Tasks' => string '0, 1' (length=4)
  'Support Help Desk' => string '24.67, 14.38' (length=12)
  'Development' => string '7.74, 2.11' (length=10)
  'Consulting Services' => &string '4.04, 0' (length=7)

希望這可以幫助 :)

編輯

eval.in的實時示例

如果每個月您可能有不同的密鑰,並且您事先都不了解它們,則可以使用下面的代碼($ month_array是您的預處理陣列)。

$new_array = array();

foreach($month_array as $month => $month_data) {
  foreach($month_data as $data => $data_value) {
     $new_array[$data] = array();
  }
}

foreach($month_array as $month => $month_data) {
  foreach($new_array as $data => $data_value) {
     if(isset($month_data[$data])) {
        $new_array[$data][] = $month_data[$data];
     } else {
        $new_array[$data][] = 0;
     }
  }
}

foreach ($new_array as &$key) {
    $key = implode(", ", $key);
}

假設您的數組存儲在$main_arr ,結果數組為$result_arr

$result_arr = array();

foreach ($main_arr as $month) {
    foreach ($month as $key => $val) {
        if (!isset($result_arr[$key])) {
            $result_arr[$key] = array($val);
        } else {
            array_push($result_arr[$key], $val);
        }
    } 
}

foreach ($result_arr as $key => $val) {
    $result_arr[$key] = implode(', ',  $val);
}

print_r($result_arr); //Final output. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM