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];
}
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); }