-4

Google API を使用して Analytics からデータを抽出しています。しかし、配列内の重複を削除できません。フォーラムを確認したところ、array_unique の機能が機能しているように見えますが、機能させることができません。何か案は?

とても有難い!

コード:

<?php
    $jsonurl = "URL";
    $json = file_get_contents($jsonurl,0,null,null);
    $arrayJson = json_decode($json, true);
    $arrayTable = $arrayJson['rows'];
?>
    <table style="border 1px solid" width="700px">
      <tr>
        <td>ID</td>
        <td>Source</td>
        <td>Medium</td>
        <td>Column 4</td>
        <td>Column 5</td>
        <td>Column 6</td>
        <td>Column 7</td>
        <td>Column 8</td>
     </tr>
    <?php  for($i = 0; $i < count($arrayTable); $i++) { ?> 
      <tr> 
       <?php  for($ii = 0; $ii < count($arrayTable[$i]); $ii++) { ?>
         <td> <?php print_r($arrayTable[$i][$ii]); ?></td>
       <?php  }  ?>
     </tr>
     <?php  } ?> 
   </table>
4

3 に答える 3

4

以下のようにarray_uniqueを使用できます。

$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);

出力:

Array
(
    [a] => green
    [0] => red
    [1] => blue
)
于 2013-11-05T08:49:49.470 に答える
0

問題は、array_unique多次元配列で使用しようとしているためです。配列の最初のレベルでのみ機能するように設計されています。例えば:

$a = array('crazy', 'sane', 'mad', 'sane');

print_r( array_unique($a) );

上記は次のようになります。

array( 'crazy', 'sane', 'mad' );

ただし、試してみると:

$a = array( 
  0 => array('crazy'), 
  1 => array('sane'), 
  2 => array('mad'), 
  3 => array('sane'),
);

print_r( array_unique($a) );

あなたは得るでしょう:

Array ( [0] => Array ( [0] => crazy ) )

これは、array_unique一意化を行う前にすべての値を文字列に変換するためです。PHP では、キャスト時にすべての配列が文字列を生成しますArray...これが、1 つの項目しか得られない理由です。

これを解決する唯一の方法は、一意の値を表す 1 つの値を選択し、これに基づいて並べ替えまたは一意化することです。標準的なアプローチは、この値を配列のキーとして設定することです。これにより、一意のリストが自動的に作成されます。

たとえば、上記の多次元配列を取得すると、次のようにして一意の配列に変換できます。

$u = array();
foreach ( $a as $key => $val ) {
  $u[reset($val)] = $val;
}

print_r( $u );

あなたは得るでしょう:

Array ( 
  [crazy] => Array ( 
    [0] => crazy 
  ) 
  [sane] => Array ( 
    [0] => sane 
  ) 
  [mad] => Array ( 
    [0] => mad 
  ) 
) 
于 2013-11-05T10:50:11.630 に答える
0

あなたはサイクルの前にそれをしなければなりません。例えば:

$arrayTable = array_unique($arrayJson['rows']);
于 2013-11-05T09:07:21.403 に答える