EDI\Reader::readEdiDataValue PHP Method

readEdiDataValue() public method

read data value from parsed EDI data
public readEdiDataValue ( array/string $filter, integer $l1, $l2 = false, boolean $required = false ) : string/null
$filter array/string
$l1 integer first level item number (start by 1)
$required boolean if required, but no exist, register error
return string/null
    public function readEdiDataValue($filter, $l1, $l2 = false, $required = false)
    {
        //interpret filter arameters
        if (!is_array($filter)) {
            $segment_name = $filter;
            $filter_elements = false;
        } else {
            $segment_name = $filter[0];
            $filter_elements = $filter[1];
        }
        $segment = false;
        $segment_count = 0;
        //search segment, who conform to filter
        foreach ($this->parsedfile as $edi_row) {
            if ($edi_row[0] == $segment_name) {
                if ($filter_elements) {
                    $filter_ok = false;
                    foreach ($filter_elements as $el_id => $el_value) {
                        $f_el_list = explode('.', $el_id);
                        if (count($f_el_list) == 1) {
                            if (isset($edi_row[$el_id]) && $edi_row[$el_id] == $el_value) {
                                $filter_ok = true;
                                break;
                            }
                        } else {
                            if (isset($edi_row[$f_el_list[0]]) && (isset($edi_row[$f_el_list[0]][$f_el_list[1]]) && is_array($edi_row[$f_el_list[0]]) && $edi_row[$f_el_list[0]][$f_el_list[1]] == $el_value || isset($edi_row[$f_el_list[0]]) && is_string($edi_row[$f_el_list[0]]) && $edi_row[$f_el_list[0]] == $el_value)) {
                                $filter_ok = true;
                                break;
                            }
                        }
                    }
                    if ($filter_ok === false) {
                        continue;
                    }
                }
                $segment = $edi_row;
                $segment_count++;
            }
        }
        //no found segment
        if (!$segment) {
            if ($required) {
                $this->errors[] = 'Segment "' . $segment_name . '" no exist';
            }
            return null;
        }
        //found more one segment - error
        if ($segment_count > 1) {
            $this->errors[] = 'Segment "' . $segment_name . '" is ambiguous';
            return null;
        }
        //validate elements
        if (!isset($segment[$l1])) {
            if ($required) {
                $this->errors[] = 'Segment value "' . $segment_name . '[' . $l1 . ']" no exist';
            }
            return null;
        }
        //requestd first level element
        if ($l2 === false) {
            return $segment[$l1];
        }
        //requestd second level element, but not exist
        if (!is_array($segment[$l1]) || !isset($segment[$l1][$l2])) {
            if ($required) {
                $this->errors[] = 'Segment value "' . $segment_name . '[' . $l1 . '][' . $l2 . ']" no exist';
            }
            return null;
        }
        //second level element
        return $segment[$l1][$l2];
    }

Usage Example

Example #1
0
 public function testReadEdiDataValue()
 {
     $r = new Reader(__DIR__ . "/../files/example.edi");
     $sender = $r->readEdiDataValue('UNB', 2);
     $this->assertEquals('6XPPC', $sender);
     $unh2 = $r->readEdiDataValue(['UNH', ['1' => '1']], 2);
     $this->assertEquals('PAORES', $unh2[0]);
     $unh1 = $r->readEdiDataValue(['UNH', ['2.0' => 'PAORES']], 1);
     $this->assertEquals('1', $unh1);
 }