Question

I have a large HL7 message. The information I want is contained in the OBX segments and there are at least 10 OBX segments per message (as well as a load of other segments - PID, MSH etc)

I want to loop through each OBX segment and get the information held in OBX.3.2 and in OBX5.1 When I run this code I just get the data from the first OBX segment. What am I doing wrong?

$results = simplexml_load_string($payload);
//var_dump($results);
$test = $results->{'OBX'}->{'OBX.5'}->{'OBX.5.1'};
$testresult = $results->{'OBX'}->{'OBX.3'}->{'OBX.3.2'};
foreach($testresult as $b)
{
 echo "$b<br>";
}


foreach($test as $a)
{
 echo "$a<br>";
}







<HL7Message>
<MSH>
    <MSH.1>|</MSH.1>
    <MSH.2>^~\&amp;</MSH.2>
    <MSH.3>
        <MSH.3.1>MPS</MSH.3.1>
    </MSH.3>
    <MSH.4>
        <MSH.4.1></MSH.4.1>
    </MSH.4>
    <MSH.5/>
    <MSH.6/>
    <MSH.7>
        <MSH.7.1>201402181659+1100</MSH.7.1>
    </MSH.7>
    <MSH.8/>
    <MSH.9>
        <MSH.9.1>ORU</MSH.9.1>
        <MSH.9.2>R01</MSH.9.2>
    </MSH.9>
    <MSH.10>
        <MSH.10.1>20140218-1.F.25399</MSH.10.1>
    </MSH.10>
    <MSH.11>
        <MSH.11.1>P</MSH.11.1>
    </MSH.11>
    <MSH.12>
        <MSH.12.1>2.3</MSH.12.1>
    </MSH.12>
    <MSH.13>
        <MSH.13.1>1</MSH.13.1>
    </MSH.13>
    <MSH.14/>
    <MSH.15>
        <MSH.15.1>NE</MSH.15.1>
    </MSH.15>
    <MSH.16>
        <MSH.16.1>AL</MSH.16.1>
    </MSH.16>
    <MSH.17>
        <MSH.17.1>AU</MSH.17.1>
    </MSH.17>
</MSH>
<PID>
    <PID.1>
        <PID.1.1>1</PID.1.1>
    </PID.1>
    <PID.2/>
    <PID.3>

    </PID.3>
    <PID.4/>
    <PID.5>

    </PID.5>
    <PID.6/>
    <PID.7>
        <PID.7.1></PID.7.1>
    </PID.7>
    <PID.8>
        <PID.8.1></PID.8.1>
    </PID.8>
    <PID.9/>
    <PID.10/>
    <PID.11>

    </PID.11>
    <PID.12/>
    <PID.13>
        <PID.13.1/>
        <PID.13.2/>
        <PID.13.3/>
        <PID.13.4/>
        <PID.13.5/>
        <PID.13.6/>
        <PID.13.7>97953309</PID.13.7>
    </PID.13>
    <PID.14>
        <PID.14.1/>
        <PID.14.2/>
        <PID.14.3/>
        <PID.14.4/>
        <PID.14.5/>
        <PID.14.6/>
        <PID.14.7/>
    </PID.14>
    <PID.15/>
    <PID.16/>
    <PID.17/>
    <PID.18/>
    <PID.19>
        <PID.19.1>3156547109</PID.19.1>
    </PID.19>
    <PID.20/>
    <PID.21/>
    <PID.22/>
    <PID.23/>
    <PID.24/>
    <PID.25/>
    <PID.26/>
    <PID.27/>
    <PID.28/>
    <PID.29/>
    <PID.30/>
</PID>
<PV1>
    <PV1.1>
        <PV1.1.1>1</PV1.1.1>
    </PV1.1>
    <PV1.2>
        <PV1.2.1>O</PV1.2.1>
    </PV1.2>
</PV1>
<ORC>
    <ORC.1>
        <ORC.1.1>RE</ORC.1.1>
    </ORC.1>
    <ORC.2/>
    <ORC.3>
        <ORC.3.1></ORC.3.1>
        <ORC.3.2>NATA</ORC.3.2>
        <ORC.3.3></ORC.3.3>
        <ORC.3.4></ORC.3.4>
    </ORC.3>
    <ORC.4/>
    <ORC.5>
        <ORC.5.1>A</ORC.5.1>
    </ORC.5>
    <ORC.6/>
    <ORC.7/>
    <ORC.8/>
    <ORC.9/>
    <ORC.10/>
    <ORC.11/>
    <ORC.12>
        <ORC.12.1></ORC.12.1>
        <ORC.12.2></ORC.12.2>
        <ORC.12.3></ORC.12.3>
        <ORC.12.4/>
        <ORC.12.5/>
        <ORC.12.6></ORC.12.6>
    </ORC.12>
</ORC>
<OBR>
    <OBR.1>
        <OBR.1.1>1</OBR.1.1>
    </OBR.1>
    <OBR.2/>
    <OBR.3>
        <OBR.3.1>323611694-C-C950</OBR.3.1>
        <OBR.3.2></OBR.3.2>
        <OBR.3.3></OBR.3.3>
        <OBR.3.4>N</OBR.3.4>
    </OBR.3>
    <OBR.4>
        <OBR.4.1>C-C950</OBR.4.1>
        <OBR.4.2>SE-CHEMISTRY VIRTUAL</OBR.4.2>
        <OBR.4.3>2133</OBR.4.3>
    </OBR.4>
    <OBR.5/>
    <OBR.6>
        <OBR.6.1>20140214</OBR.6.1>
    </OBR.6>
    <OBR.7>
        <OBR.7.1>201402141630+1100</OBR.7.1>
    </OBR.7>
    <OBR.8/>
    <OBR.9/>
    <OBR.10/>
    <OBR.11/>
    <OBR.12/>
    <OBR.13/>
    <OBR.14>
        <OBR.14.1>201402141630+1100</OBR.14.1>
    </OBR.14>
    <OBR.15/>
    <OBR.16>
        <OBR.16.1></OBR.16.1>
        <OBR.16.2></OBR.16.2>
        <OBR.16.3></OBR.16.3>
        <OBR.16.4/>
        <OBR.16.5/>
        <OBR.16.6></OBR.16.6>
    </OBR.16>
    <OBR.17/>
    <OBR.18/>
    <OBR.19/>
    <OBR.20>
        <OBR.20.1>
            <OBR.20.1.1>LN</OBR.20.1.1>
            <OBR.20.1.2>323611694</OBR.20.1.2>
        </OBR.20.1>
    </OBR.20>
    <OBR.21/>
    <OBR.22>
        <OBR.22.1>201402181659+1100</OBR.22.1>
    </OBR.22>
    <OBR.23/>
    <OBR.24>
        <OBR.24.1>CH</OBR.24.1>
    </OBR.24>
    <OBR.25>
        <OBR.25.1>F</OBR.25.1>
    </OBR.25>
    <OBR.26/>
    <OBR.27>
        <OBR.27.1/>
        <OBR.27.2/>
        <OBR.27.3/>
        <OBR.27.4>20140214</OBR.27.4>
        <OBR.27.5/>
        <OBR.27.6>R</OBR.27.6>
    </OBR.27>
    <OBR.28>
        <OBR.28.1>0000000Y</OBR.28.1>
        <OBR.28.2></OBR.28.2>
        <OBR.28.3></OBR.28.3>
        <OBR.28.4/>
        <OBR.28.5/>
        <OBR.28.6/>
    </OBR.28>
    <OBR.29/>
</OBR>
<OBX>
    <OBX.1>
        <OBX.1.1>1</OBX.1.1>
    </OBX.1>
    <OBX.2>
        <OBX.2.1>NM</OBX.2.1>
    </OBX.2>
    <OBX.3>
        <OBX.3.1>2951-2</OBX.3.1>
        <OBX.3.2>S Sodium:</OBX.3.2>
        <OBX.3.3>LN</OBX.3.3>
    </OBX.3>
    <OBX.4/>
    <OBX.5>
        <OBX.5.1>144</OBX.5.1>
    </OBX.5>
    <OBX.6>
        <OBX.6.1>mmol/L</OBX.6.1>
        <OBX.6.2>mmol/L</OBX.6.2>
    </OBX.6>
    <OBX.7>
        <OBX.7.1>135-145</OBX.7.1>
    </OBX.7>
    <OBX.8/>
    <OBX.9/>
    <OBX.10/>
    <OBX.11>
        <OBX.11.1>F</OBX.11.1>
    </OBX.11>
    <OBX.12/>
    <OBX.13/>
    <OBX.14>
        <OBX.14.1>201402150533</OBX.14.1>
    </OBX.14>
</OBX>
<OBX>
    <OBX.1>
        <OBX.1.1>2</OBX.1.1>
    </OBX.1>
    <OBX.2>
        <OBX.2.1>NM</OBX.2.1>
    </OBX.2>
    <OBX.3>
        <OBX.3.1>2823-3</OBX.3.1>
        <OBX.3.2>S Potassium:</OBX.3.2>
        <OBX.3.3>LN</OBX.3.3>
    </OBX.3>
    <OBX.4/>
    <OBX.5>
        <OBX.5.1>5.6</OBX.5.1>
    </OBX.5>
    <OBX.6>
        <OBX.6.1>mmol/L</OBX.6.1>
        <OBX.6.2>mmol/L</OBX.6.2>
    </OBX.6>
    <OBX.7>
        <OBX.7.1>3.5-5.5</OBX.7.1>
    </OBX.7>
    <OBX.8>
        <OBX.8.1>H</OBX.8.1>
    </OBX.8>
    <OBX.9/>
    <OBX.10/>
    <OBX.11>
        <OBX.11.1>F</OBX.11.1>
    </OBX.11>
    <OBX.12/>
    <OBX.13/>
    <OBX.14>
        <OBX.14.1>201402150533</OBX.14.1>
    </OBX.14>
</OBX>
<OBX>
    <OBX.1>
        <OBX.1.1>3</OBX.1.1>
    </OBX.1>
    <OBX.2>
        <OBX.2.1>NM</OBX.2.1>
    </OBX.2>
    <OBX.3>
        <OBX.3.1>2075-0</OBX.3.1>
        <OBX.3.2>S Chloride:</OBX.3.2>
        <OBX.3.3>LN</OBX.3.3>
    </OBX.3>
    <OBX.4/>
    <OBX.5>
        <OBX.5.1>103</OBX.5.1>
    </OBX.5>
    <OBX.6>
        <OBX.6.1>mmol/L</OBX.6.1>
        <OBX.6.2>mmol/L</OBX.6.2>
    </OBX.6>
    <OBX.7>
        <OBX.7.1>95-110</OBX.7.1>
    </OBX.7>
    <OBX.8/>
    <OBX.9/>
    <OBX.10/>
    <OBX.11>
        <OBX.11.1>F</OBX.11.1>
    </OBX.11>
    <OBX.12/>
    <OBX.13/>
    <OBX.14>
        <OBX.14.1>201402150533</OBX.14.1>
    </OBX.14>
</OBX>
</HL7Message>
Was it helpful?

Solution

This script will gives your the required output

<?php 

$payload = 'job.xml';

$results = simplexml_load_file($payload);

foreach($results->OBX as $obx)
{
    //var_dump($results);
    $test = $obx->{'OBX.5'}->{'OBX.5.1'};
    $testresult = $obx->{'OBX.3'}->{'OBX.3.2'};

    echo $testresult .' : '.$test.'<br/>';

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top