これは動作します:類似した解析プログラム:なぜ1つは動作しますが、もう1つは動作しませんか?
<?php
//compare1.php
//**CLASS AND OBJECT
class Entry
{
private $s_ids;
public function __construct()
{
$this->s_ids = array();
}
public function AddS_id($s_id)
{
$this->s_id[] = $s_id;
}
public function SetS_ids($s_ids)
{
$this->s_ids[] = $s_ids;
}
public function GetS_id($i)
{
if ($i > count($s_ids))
throw new Exception('Out of bounds.');
return $this->s_ids[$i];
}
public function GetS_ids()
{
return $this->s_ids;
}
}
//EXTRACTION FUNCTION
function extractS_ids($line)
{
$matches;
preg_match('/^S_id:\s+(.*)\s+$/', $line, $matches);
return $matches[1];
}
//LINE CHECKS
function isStart($line)
{
return preg_match('/^Start.*$/', $line);
}
function isS_id($line)
{
return preg_match('/^S_id:\s+(.*)$/', $line);
}
function isEnd($line)
{
return preg_match('/^End.*$/', $line);
}
//VARIABLE DECLARATION
$fName = 'sample1.txt';
$fh = fopen($fName, 'r');
$line;
$entry;
$entrys = array();
//PARSE OPERATION
if ($fh === FALSE)
die ('Failed to open file.');
while (($line = fGets($fh)) !== FALSE)
{
if (isStart($line)){
$entry = new Entry();
}
if (isS_id($line)){
$entry->SetS_ids(extractS_ids($line));
}
if (isEnd($line)){
$entrys[] = $entry;
}
}
//ARRAY RETRIEVAL
echo "<pre>";
print_r($entrys);
echo "</pre>";
fclose($fh);
?>
このサンプルファイルでは:これは動作しません
Start
S_id: 0611147
S_id: 0651134
End
Start
S_id: 0611125
S_id: 0651125
End
:
<?php
//compare2.php
//CLASS AND OBJECT
class Entry
{
private $titles;
public function __construct()
{
$this->titles = array();
}
public function AddType($title)
{
$this->titles[] = $title;
}
public function SetTitles($titles)
{
$this->titles[] = $titles;
}
public function GetTitle($i)
{
if ($i > count($titles))
throw new Exception('Out of bounds.');
return $this->titles[$i];
}
public function GetTitles()
{
return $this->titles;
}
}
//EXTRACTION FUNCTION
function extractTitles($line)
{
$matches;
preg_match('/^<title>(.*)<\/title>.*$/', $line, $matches);
return $matches[1];
}
//LINE CHECK FUNCTION
function isStart_entry($line)
{
return preg_match('/^<title>.*$/', $line);
}
function isTitle($line)
{
return preg_match('/^<title>.*<\/title>.*$/', $line);
}
function isClose_entry($line)
{
return preg_match('/^<\/list>.*$/', $line);
}
//DECLARATIONS
$fName = 'sample2.txt';
$fh = fopen($fName, 'r');
$line;
$entry;
$entrys = array();
//PARSE OPERATION
if ($fh === FALSE)
die ('Failed to open file.');
while (($line = fgets($fh)) !== FALSE)
{
if (isStart_entry($line)){
$entry = new Entry();
}
if (isTitle($line)){
$entry->SetTitles(extractTitles($line));
}
if (isClose_entry($line)){
$entrys[] = $entry;
}
}
// Dump the results.
echo "<pre>";
print_r($entrys);
echo "</pre>";
// Close the file.
fclose($fh);
?>
このサンプルファイル付き:
<list>
<title>Coco</title>
<title>Cafe Milk Tea</title>
</list>
<list>
<title>Strong Off</title>
<title>5% Grapefruit</title>
</list>
ログicは同じようです。私は複数形をチェックし、preg match機能をチェックしました。 compare1.php
ですべてがcompare2.php
を平行ますが、出力の違いを見ているようだ:
出力1:
Array
(
[0] => Entry Object
(
[s_ids:Entry:private] => Array
(
[0] => 0611147
[1] => 0651134
)
)
[1] => Entry Object
(
[s_ids:Entry:private] => Array
(
[0] => 0611125
[1] => 0651125
)
)
出力2:
Array
(
[0] => Entry Object
(
[titles:Entry:private] => Array
(
[0] => Cafe Milk Tea
)
)
[1] => Entry Object
(
[titles:Entry:private] => Array
(
[0] => 5% Grapefruit
)
)
)
)
どのファイルはかなり正確に同じにすることができ、そして2人の後者は異なる種類の結果を返しますか? は[0] => 5% Grapefruit
でなければなりませんか?そして[0] => Cafe Milk Tea
は[0] => Coco; [1] => Cafe Milk Tea
ですか?
は、ペン、紙を取り、ラインによって手動で私は今、その6または7回をやった – zerkms
@zerkmsをこれらのコード行のそれぞれを実行します。すべてはまったく同じように見えます。違いは見られません。私はもう2〜3回はもう一度やり直します。私は分割ビューでコードを見ています。あなたの要求に応じて、これを書いてください。 –
「すべてがまったく同じに見えますが、違いはありません」---コードを比較せずに中間結果を比較します – zerkms