0

私は検索していて、うまくいくものを見つけることができませんが、これが私がやりたいことです。

このコード:

try{
$timeout = 2;
$scraper = new udptscraper($timeout);
$ret = $scraper->scrape('udp://tracker.openbittorrent.com:80',array('0D7EA7F06E07F56780D733F18F46DDBB826DCB65'));
print_r($ret);
}catch(ScraperException $e){
echo('Error: ' . $e->getMessage() . "<br />\n");
echo('Connection error: ' . ($e->isConnectionError() ? 'yes' : 'no') . "<br />\n");
}

これを出力します:

Array ( [0D7EA7F06E07F56780D733F18F46DDBB826DCB65] => Array ( [seeders] => 148 [completed] => 10 [leechers] => 20 [infohash] => 0D7EA7F06E07F56780D733F18F46DDBB826DCB65 ) ) 

そして、そのシーダーを$seedsなどの文字列にカウントしたいと思います。どうすればこれを行うことができますか?

4

3 に答える 3

2

このようなもの?

$seeds = $ret['0D7EA7F06E07F56780D733F18F46DDBB826DCB65']['seeders'];
于 2012-12-30T22:35:04.533 に答える
0

配列の値を個別の変数として割り当てようとしているか、単に文字列にキャストしようとしているかは明確ではありません。各配列キーを、一致する配列値を持つ個別の変数として割り当てることにより、上記のすべてのオプションを実現する良い方法を次に示します。

$ret_vars = array_pop($ret);
foreach ($ret_vars as $variable_name=>$variable_value) :
    ${$variable_name} = (string)$variable_value;
endforeach;

元の例では、これにより$seeders、 、$completed$leechersおよび$infohashに一致する文字列値が入力されます。もちろん、これらの変数名がコードの他の場所で使用/必要とされていないことを確認してください。${}その場合は、次のように、構造にある種の一意のプレフィックスを追加するだけです。${'ret_'.$variable_name}

于 2012-12-30T22:49:28.057 に答える
0

strval()数値を文字列に変換することができます。

$string = strval($number);

または、文字列にキャストできます。

$string = (string)$number;

あなたの文脈では次のようになります:

$string = strval($ret['0D7EA7F06E07F56780D733F18F46DDBB826DCB65']['seeders']);

ただし、その奇数文字列は配列の最初のインデックスでもあるため、次のようにすることもできます。

$string = strval($ret[0]['seeders']);

または、インデックスのみを使用したい場合 (「seeders」は 2 番目の配列の最初のインデックスでもあります):

$string = strval($ret[0][0]);

番号だけが必要な場合は、それも簡単です。

$num = $ret[0][0];

于 2012-12-30T22:35:24.297 に答える