-1

ここにコードを出力するため、PiwikAPIによって提供されるPHP形式の配列を使用するのに問題があります。

array (
 0 => 
  array (
    'idsite' => '2',
    'name' => 'coolrob335.com',
    'main_url' => 'http://coolrob335.com',
    'ts_created' => '2012-06-02 21:05:56',
    'ecommerce' => '0',
    'timezone' => 'Europe/London',
    'currency' => 'GBP',
    'excluded_ips' => '',
    'excluded_parameters' => '',
    'group' => '',
    'feedburnerName' => NULL,
  ),
 1 => 
  array (
    'idsite' => '3',
    'name' => 'robbrazier.com',
    'main_url' => 'http://robbrazier.com',
    'ts_created' => '2012-06-04 14:17:28',
    'ecommerce' => '0',
    'timezone' => 'Europe/London',
    'currency' => 'GBP',
    'excluded_ips' => '',
    'excluded_parameters' => '',
    'group' => '',
    'feedburnerName' => NULL,
  ),
)

私が疑問に思っているのは、これです。$ obj [0] ['idsite']を使用すると、$ obj [0]-> idsiteが機能しないため、この配列を直接操作する方法はありますか(後者は機能しないことを私は知っています) stdClassオブジェクトではないため、機能します)。

だから、上のリンクに示されている配列をから変換する方法はありますか

array (
   0 => 
    array (
      'idsite' => '2',

のようなものに

array (
   0 => 
     array (
      ['idsite'] => '2',

またはそれをstdClassオブジェクトに変換して、操作できるようにしますか?(私は多次元配列をstdClassオブジェクトに変換するために、SOとgoogleを検索しましたが、この場合、どのソリューションも機能しませんでした。[] => ''

補足:これから私がやろうとしているのは、「idsite」と「name」を取得し、リンクのタイトルとして「name」を含むリストに変換することです。

$url = "{$user_data['piwik_server']}/index.php?module=API&method=API.get&idSite={$obj->id}&format=PHP&prettyDisplay=1&serialize=0&token_auth={$user_data['apikey']}"

<a href="<?php $url; ?>"><?php $obj->name; ?></a>

(これは、効率的に機能するためにforeach / whileループ内にある必要がある可能性が高いことを認識しています)

4

3 に答える 3

1

あなたが提供した配列を使用して、次のコード:

function toObject($any) {
    $rv = new stdClass();

    if (is_array($any)) {
        foreach($any as $k => $v) {
            $rv->$k = is_array($v)
                ? toObject($v)
                : $v;
        }
   } else {
        $rv = (object) $any;
    }

    return $rv;
}

$o = toObject($a);

var_dump($o);

次の出力が生成されます。

object(stdClass)#1 (2) {
  ["0"]=>
  object(stdClass)#2 (11) {
    ["idsite"]=>
    string(1) "2"
    ["name"]=>
    string(14) "coolrob335.com"
    ["main_url"]=>
    string(21) "http://coolrob335.com"
    ["ts_created"]=>
    string(19) "2012-06-02 21:05:56"
    ["ecommerce"]=>
    string(1) "0"
    ["timezone"]=>
    string(13) "Europe/London"
    ["currency"]=>
    string(3) "GBP"
    ["excluded_ips"]=>
    string(0) ""
    ["excluded_parameters"]=>
    string(0) ""
    ["group"]=>
    string(0) ""
    ["feedburnerName"]=>
    NULL
  }
  ["1"]=>
  object(stdClass)#3 (11) {
    ["idsite"]=>
    string(1) "3"
    ["name"]=>
    string(14) "robbrazier.com"
    ["main_url"]=>
    string(21) "http://robbrazier.com"
    ["ts_created"]=>
    string(19) "2012-06-04 14:17:28"
    ["ecommerce"]=>
    string(1) "0"
    ["timezone"]=>
    string(13) "Europe/London"
    ["currency"]=>
    string(3) "GBP"
    ["excluded_ips"]=>
    string(0) ""
    ["excluded_parameters"]=>
    string(0) ""
    ["group"]=>
    string(0) ""
    ["feedburnerName"]=>
    NULL
  }
}
于 2012-07-22T19:21:30.643 に答える
0

これを試して

$arr=array (
    array (
       'idsite' => '2',
       'name' => 'coolrob335.com',
       'main_url' => 'http://coolrob335.com',
       'ts_created' => '2012-06-02 21:05:56',
       'ecommerce' => '0',
       'timezone' => 'Europe/London',
       'currency' => 'GBP',
       'excluded_ips' => '',
       'excluded_parameters' => '',
       'group' => '',
       'feedburnerName' => NULL,
    ),
    array (
        'idsite' => '3',
        'name' => 'robbrazier.com',
        'main_url' => 'http://robbrazier.com',
        'ts_created' => '2012-06-04 14:17:28',
        'ecommerce' => '0',
        'timezone' => 'Europe/London',
        'currency' => 'GBP',
        'excluded_ips' => '',
        'excluded_parameters' => '',
        'group' => '',
        'feedburnerName' => NULL,
    ),
);


foreach($arr as $k=>$v) $obj[$k]=(object)$v;
echo $obj[0]->idsite; // 2
echo $obj[0]->name; // coolrob335.com

デモ

于 2012-07-22T19:48:41.990 に答える
0

PHP データで PIwik API を使用するときにすべきことは、HTTP 要求で &serialize=1 を設定し (実行している serialize=0 の代わりに)、単純に実行することです。

$value = unserialize($value);

その後、すぐに使用できる配列を取得します。

于 2012-07-30T01:36:16.303 に答える