将这些方法包含在我的班级中

时间:2011-08-29 16:06:10

标签: php oop methods

这是我的两种方法,我需要将它们包括在我的班级中,但由于我不是OO程序员,因此我不确定如何做到这一点

function gcd($x,$y) 
{
    do {
        $rest=$x%$y;
    $x=$y;
    $y=$rest;
    } while($rest!==0);
    return $x;
}

function testCommonality($a) 
{
  $keys = array_keys($a[1]);
  $common = array();
  foreach ($keys as $key) {
    $v1 = $a[0][$key];
    $v2 = $a[1][$key];
    if ((gcd($v1, $v2)) != 1) $a[0]['m'] *= 1.5;
  }
  return $a;
}

print_r($parser->algorithm->testCommonality());

我需要在这个类中包含那些,并让它们在$ parser->算法的输出上运行帮助非常感谢

class CSVParser
{

    public $output = NULL;
    public $digits = NULL;

    public function __construct($file)
    {


        if (!file_exists($file)) {
            throw new Exception("$file does not exist");
        }

        $this->contents = file_get_contents($file);
        $this->output = array();
        $this->digits = array();
    }

    public function parse($separatorChar1 = ',', $separatorChar2 = ';', $enclosureChar = '"', $newlineChar = "\n")
    {

        $lines = explode($newlineChar, $this->contents);
        foreach ($lines as $line) {
            if (strlen($line) == 0) continue;
            $group = array();
            list($part1, $part2) = explode($separatorChar2, $line);
            $group[] = array_map(array($this, "trim_value"), explode($separatorChar1, $part1), array("$enclosureChar \t"));
            $group[] = array_map(array($this, "trim_value"), explode($separatorChar1, $part2), array("$enclosureChar \t"));
            $this->output[] = $group;
        }
    }

    private function trim_value($value, $chars)
    {
        return preg_replace("#^( |" . $chars . ")+#", '', $value);
    }

    public function algorithm()
    {
        $alpha = array(
            'c' => str_split('bcdfghjklmnpqrstvwxz'),
            'v' => str_split('aeiouy')
        );
        $i = 0;
        $k = 0;
        foreach ($this->output as $item) {
            $cnt = 0;
            $this->digits[$i] = array();
            foreach ($item as $part) {
                $this->digits[$i][$cnt] = array();
                $new = array();
                foreach ($part as $str) {
                    $v = count(array_intersect(str_split($str), $alpha['v']));
                    $c = count(array_intersect(str_split($str), $alpha['c']));
                    $t = strlen(str_replace(' ', '', $str));
                    $new = array('v' => $v, 'c' => $c, 't' => $t);
                    $this->digits[$i][$cnt][] = $new;
                }
                $cnt++;
            }
            $i++;
        }
    }
}


$parser = new CSVParser("file.txt");
$parser->parse();
print_r($parser->output);
$parser->algorithm();
print_r($parser->digits);

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我对PHP知之甚少,但是,如果我理解正确的话,你提出的要求似乎很直接。我原以为有人会回答这个问题。

以下内容可能类似于您的目标:

class CSVParser
{

public $output = NULL;
public $digits = NULL;

public function __construct($file)
{


    if (!file_exists($file)) {
        throw new Exception("$file does not exist");
    }

    $this->contents = file_get_contents($file);
    $this->output = array();
    $this->digits = array();
}

public function parse($separatorChar1 = ',', $separatorChar2 = ';', $enclosureChar = '"', $newlineChar = "\n")
{

    $lines = explode($newlineChar, $this->contents);
    foreach ($lines as $line) {
        if (strlen($line) == 0) continue;
        $group = array();
        list($part1, $part2) = explode($separatorChar2, $line);
        $group[] = array_map(array($this, "trim_value"), explode($separatorChar1, $part1), array("$enclosureChar \t"));
        $group[] = array_map(array($this, "trim_value"), explode($separatorChar1, $part2), array("$enclosureChar \t"));
        $this->output[] = $group;
    }
}

private function trim_value($value, $chars)
{
    return preg_replace("#^( |" . $chars . ")+#", '', $value);
}

public function algorithm()
{
    $alpha = array(
        'c' => str_split('bcdfghjklmnpqrstvwxz'),
        'v' => str_split('aeiouy')
    );
    $i = 0;
    $k = 0;
    foreach ($this->output as $item) {
        $cnt = 0;
        $this->digits[$i] = array();
        foreach ($item as $part) {
            $this->digits[$i][$cnt] = array();
            $new = array();
            foreach ($part as $str) {
                $v = count(array_intersect(str_split($str), $alpha['v']));
                $c = count(array_intersect(str_split($str), $alpha['c']));
                $t = strlen(str_replace(' ', '', $str));
                $new = array('v' => $v, 'c' => $c, 't' => $t);
                $this->digits[$i][$cnt][] = $new;
            }
            $cnt++;
        }
        $i++;
    }
    return $this->digits;
}

private function gcd($x,$y) 
{
    do {
        $rest=$x%$y;
    $x=$y;
    $y=$rest;
    } while($rest!==0);
    return $x;
}

public function testCommonality($a) 
{
    $keys = array_keys($a[1]);
    $common = array();
    foreach ($keys as $key) {
    $v1 = $a[0][$key];
    $v2 = $a[1][$key];
    if ((gcd($v1, $v2)) != 1) $a[0]['m'] *= 1.5;
  }
   return $a;
}
}


$parser = new CSVParser("file.txt");
$parser->parse();
print_r($parser->output);
$parser->algorithm();
print_r($parser->digits);
print_r( $parser->testCommonality( $parser->digits() ) );

`