2011-09-23 160 views
0

我試圖從多維數組內的多維數組中獲取值。這裏是多維數組...PHP從多維數組中獲取多維數組的唯一值

Array 
(
    [0] => Array 
     (
      [CalID] => 121111 
      [Rink] => North 
      [TimeChunks] => Array 
       (
        [int] => Array 
         (
          [0] => 6 
          [1] => 4 
          [2] => 3 
          [3] => 2 
          [4] => 1 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [CalID] => 121111 
      [Rink] => South 
      [TimeChunks] => Array 
       (
        [int] => Array 
         (
          [0] => 4 
          [1] => 2 
         ) 

       ) 


     ) 
) 

我想僅從[TimeChunks]的有效時間塊[INT]即:1,2,3,4,6,8我似乎卻不能深入到第二個多維數組。這是我一直在嘗試沒有骰子:

$tmp = array(); 

foreach ($a as $row) 
    if (!in_array($row,$tmp)) array_push($tmp,$row); 

print_r ($tmp); 

有什麼建議嗎?

回答

0
$tmp = array(); 

foreach ($a AS $row) { 
    if (isset($row['TimeChunks']['int']) && is_array($row['TimeChunks']['int'])) { 
    $tmp = array_merge($tmp, $row['TimeChunks']['int']); 
    } 
} 
$tmp = array_unique($tmp); 

如果數組鍵AREN值對你來說很重要,這應該能夠做到。它只是將不同[TimeChunk] [int]中的所有值組合在一起,然後刪除重複項。

+0

'array_merge()'不會在這裏剪切它,它會用相同的鍵覆蓋後面的值,因爲'['int']'被索引... – DaveRandom

+0

Thx。這有效...鑰匙在我這裏沒用。我認爲我錯過的步驟是對KISS,並刪除愚蠢。 – user961389

+0

['int']包含數字鍵看這個例子,所以應該沒問題 – buffcoredave

0

你不是你的陣列通過陣列循環中的「TimeChunks」鍵可言,試試這個:

foreach ($a as $row) { 
    foreach ($row['TimeChunks'] as $chunk) { 
    if (!in_array($row,$chunk)) array_push($tmp,$$chunk); 
    } 
} 
0

像這樣的事情?

$tmp = array(); 
foreach ($array as $section) { // Loop outer array 
    if (isset($section['TimeChunks']['int'])) { // make sure ['TimeChunks']['int'] is set for this inner array 
    foreach ($section['TimeChunks']['int'] as $chunk) { // Loop the time chunks 
     $tmp[] = $chunk; // Push the chunks onto the $tmp array 
    } 
    } 
} 
$tmp = array_unique($tmp); // Remove duplicate values 

print_r($tmp); 

你必須通過外循環數組,得到['TimeChunks']['int']關鍵的內容,並推送到$tmp陣列。您可以在每次迭代中執行in_array()檢查,但是如果將它們全部添加到$tmp陣列並在之後通過array_unique()將更有效(更少函數調用)。

0

爲什麼不使用的foreach($ A爲$關鍵=> $值)

那麼你可以使用你的if語句上的按鍵,如果你想