1

配列からいくつかの値を取得して、ページに出力したいと思います。

[1] については、次のものを抽出する必要があります。USD 7.0269 6.4119 0.14231 0.15596

配列は次のようになります。

print_r($arr);
[1] => USD United States of America 7.0269  6.4119  Dollars 0.14231 0.15596  � Copyright 2003-2011. Powered by CurrencyXchanger 3.580 
[2] => EUR  Euro Member Countries 9.0373    8.3253  Euro    0.1107  0.1201   � Copyright 2003-2011. Powered by CurrencyXchanger 3.580

これを達成するための最良のソリューションは何ですか?

4

5 に答える 5

1

正規表現のソリューションは次のとおりです。

foreach($arr as $key => $item)
{
    preg_match('/^([A-Z]){3}[\sA-Za-z]+(\d+\.\d+)\s+(\d+\.\d+)\s+[A-Za-z]+\s+(\d+\.\d+)\s+(\d+\.\d+)/', $item, $matches);
    $result[$key] = array_shift($matches);
}

正規表現はパターンに対応し、の連続した要素内に必要なものすべてをキャプチャします$matches。は完全一致を表すため$matches[0]、最初の要素を削除して結果配列に割り当てます。

于 2012-10-24T13:31:38.233 に答える
1

preg_match_all()関心のある領域を切り取った後に使用します。

foreach ($arr as $line) {
    // currency is in the first four characters (apparently)
    $currency = substr($line, 0, 4);

    // we use everything left of 'Copyright'
    $rest = strstr($line, 'Copyright', true);

    // match each occurrence of nn.nnnn
    if (preg_match_all('/\d+\.\d+/', $rest, $matches)) {
        // $matches[0] contains all the amounts
        echo $currency, ' ', join(' ', $matches[0]), PHP_EOL;
    }
}

PHP < 5.2 の場合、次の行を計算する必要があります$rest

$rest = substr($line, 0, strpos($line, 'Copyright'));

デモ

于 2012-10-24T13:32:13.277 に答える
0

試す

 foreach($arr as $v) {
  $items = explode(' ', $v);
  $new_arr[] = $items[0]; //Getting the currency type
  foreach($items as $k => $m) {
    if(is_numeric($m) && floor($m) != $m && $k != (count($items) - 1))
      $new_arr[] = $m;
  }
 }

 //displaying the $new_arr
 foreach($new_arr as $n) {      
  if(is_numeric($n) === FALSE)
    echo "\n";     
    echo $n . ' ';
 }

ここで実際の動作を確認してください

于 2012-10-24T13:27:58.990 に答える
0

正規表現を使用すると、それを取得できます。

foreach($arr as $key => $value) {
    preg_match_all('/(\d+\.\d+)/', $value, $matches);
    $result[substr($value, 0, 3)] = array_shift($matches);
}

このような配列を取得します

var_dump($result);
array (
    'USD' => array( 7.0269, 6.4119, 0.14231,  0.15596 )
    'EUR' => array( 9.0373, 8.3253, 0.1107,  0.1201 )
)
于 2012-10-24T13:42:16.177 に答える
0

すぐに完了:

$result = array_map(
    function ($string) {
        preg_match_all('/(\d+\.\d+)\s/', $string, $matches);
        return substr($string, 0, 3) . ' ' . implode(' ', $matches[1]);
    },
    $arr
);

結果:

Array
(
    [0] => USD 7.0269 6.4119 0.14231 0.15596
    [1] => EUR 9.0373 8.3253 0.1107 0.1201
)
于 2012-10-24T13:56:08.163 に答える