2011-09-23 158 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语句上的按键,如果你想