1

私はプログラミングが初めてで、個人的な使用のために小さな PHP 価格比較スクリプトを作成しようとしています。私はすでに Webshop のサイトを解析し (単純な dom パーサーを使用して)、階層と価格を含む (一種の) クリーンアップされた文字列を取得することができました。

私が扱っている文字列は、次のようにフォーマットされています。

" 50  27,00 "  //50 pieces of a product cost €27,00 (without the ""s)
"1000  26,60 " //1000 pieces of a product cost €26,60

文字列の最初の部分を $tier に取得し、2 番目の部分 (コンマを含む) を文字列 $price に取得したいと考えています。

これを行う方法を教えてください。文字列を開始するスペースが異なる場合があります (上記の例を参照してください。真ん中には常に 2 つの空白があります。

配列は、次のように取得できれば問題ありません(スペースなし):

$pricearray = array(50, "27,00"); //string to number will be my next problem to solve, first things first 

preg_split を使用する必要があると思いますが、使用する式を今は使用しないでください。

私と一緒に考えてくれてありがとう。

4

2 に答える 2

4

最も簡単な方法は、explode関数を呼び出すことです。

$string = '1000 26,60';
$pricearray = explode(' ', $string);

しかし、まず第一に、不要なスペースをすべて取り除く必要があります。

$string = trim($string); // remove spaces at the beginning and at the end
$string = preg_replace('/\s+/', ' ', $string); // replace 1+ spaces with 1 space

スペースの置換方法は、この質問から取られました。ありがとう、コダディクト!

于 2012-12-24T20:56:54.320 に答える
1

正規表現エンジンを理解するのは少し難しいですが、これらのオプションのスペースを簡単に実行できます。

正規表現パターンを間違えていないか見てみましょう:

$yourarray = array();
//just extract the pattern you want
preg_match( '/([0-9]+) + ([0-9]+,[0-9]+)/', " 50  27,00 ", $yourarray );
var_dump( $yourarray );
preg_match( '/([0-9]+) + ([0-9]+,[0-9]+)/', "1000  26,60 ", $yourarray );
var_dump( $yourarray );

// validate and extract the pattern you want
if ( !preg_match_all( '/^ *([0-9]+) +([0-9]+,[0-9]+) *$/', " 50  27,00 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
if ( !preg_match_all( '/^ *([0-9]+) + ([0-9]+,[0-9]+) *$/', "1000  26,60 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
if ( !preg_match_all( '/^ *([0-9]+) + ([0-9]+,[0-9]+) *$/', "1000 26 ", $yourarray ) )
  print "error";
else
  var_dump( $yourarray );
于 2012-12-24T21:16:49.237 に答える