2012-11-14 58 views
1

我有一個數組,看起來像這樣:如何在PHP中重新構建多維數組?

array(3) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(10) "2012-11-14" 
    [1]=> 
    string(5) "3238" 
    } 
    [1]=> 
    array(2) { 
    [0]=> 
    string(10) "2012-11-13" 
    [1]=> 
    string(5) "3231" 
    } 
    [2]=> 
    array(2) { 
    [0]=> 
    string(10) "2012-11-13" 
    [1]=> 
    string(5) "3231" 
    } 

我想編寫一個foreach循環,就會把這個數組:

array(2) { 
    [0]=> 
    array(1) { 
    "2012-11-14" => "3238" 
    } 
    [1]=> 
    array(1) { 
    "2012-11-13" => "3231" 
    } 

所以,基本上,我想用數組元素格式爲YMD日期,作爲數組中第二個元素的鍵。

+0

做重複的日期鍵始終指向相同的值,如果不是,你如何選擇? –

+0

是的,他們總是指向相同的價值! – midde

回答

2

給出下面的陣列...

$array = array(
    0 => array(0 => "2012-11-14", 1 => "3238"), 
    1 => array(0 => "2012-11-13", 1 => "3231"), 
    2 => array(0 => "2012-11-13", 1 => "3231"), 
); 

把它變成一個新的數組是這樣的:

$new_array = array(); 
foreach ($array as $key => $item) 
{ 
    $new_array[$key][$item[0]] = $item[1]; 
} 

print_r($new_array); 

產生這樣的輸出:

Array 
(
[0] => Array 
    (
     [2012-11-14] => 3238 
    ) 

[1] => Array 
    (
     [2012-11-13] => 3231 
    ) 

[2] => Array 
    (
     [2012-11-13] => 3231 
    ) 

) 

我的回答不擺脫重複,但原始問題中指定的添加維度意味着重複的日期作爲鍵不是問題。

+0

完美地工作,謝謝!我會盡快接受它作爲答案(顯然,我需要等待3分鐘)。 – midde

2
<?php 

$data = array(
    array("2012-11-14", "3238"), 
    array("2012-11-13", "3231"), 
    array("2012-11-13", "3231") // warning! when there are two record with same date, the second's count will be display 
); 

$result = array(); 
foreach ($data as $value) { 
    $result[$value[0]] = $value[1]; 
} 

echo '<pre>'; 
print_r($result); 
0
<?php 
    $newArray = array(); 
    for($i=0;$i<count($arrayVariable);$i++) 
    { 
     $newArray[$arrayVariable[$i][0]] = $arrayVariable[$i][1]; 
    } 

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

沒有測試,但這樣的事情應該在概念上工作。當然,將arrayVariable更改爲您的變量..但這一邊。

0

您可以使用此代碼來獲取你想要的東西:

$dates = array(
    array("2012-11-01", "3238"), 
    array("2012-11-03", "4321") 
); 

print_r($dates); 

$result = array(); 
foreach($dates as $value) { 
    $result[][$value[0]] = $value[1]; 
} 


print_r($result); 

輸出將看起來像的形式要求:

Array 
(
    [0] => Array 
     (
      [2012-11-01] => 3238 
     ) 

    [1] => Array 
     (
      [2012-11-03] => 4321 
     ) 

) 

鍵盤演示:http://codepad.org/XAmUEdYh

不過,我想個人更喜歡Aykut的解決方案。當你有兩個具有相同日期的記錄時,你當然會遇到問題,但總體陣列布局更好一點;)。

0

這裏是我想出了:

<?php 
$original = array(
    array(
     "2012-11-14", 
     "3238" 
    ), 
    array(
     "2012-11-13", 
     "3231" 
    ), 
    array(
     "2012-11-13", 
     "3231" 
    ) 
); 

$newArray = array(); 
foreach($original as $subArray){ 
    $newArray[] = array($subArray[0] => $subArray[1]); 
} 
var_dump($newArray);