Ваша проблема в том, что вы делаете
$currentRecord->$dateFirst['month']
PHP сначала оценит $dateFirst['month']
в целом, прежде чем пытаться использовать его как свойство
$dateFirst = 'date-first';
var_dump( $dateFirst['month'] ); // gives "d"
, поскольку строкиможно получить по смещению с помощью обозначения массива , но нецелые смещения преобразуются в целое число, и, поскольку приведение 'month' к целому числу равно 0, вы пытаетесь сделать $currentRecord->d
:
$xml = <<< XML
<record>
<date-first month="jan"/>
<d>foo</d>
</record>
XML;
$record = simplexml_load_string($xml);
$var = 'date-first';
echo $record->$var['month']; // foo
Вы можете получить доступ к свойствам дефиса с помощью фигурных скобок:
$record->{'date-first'}['month'] // jan
В выражении sidenote, когда XML, показанный в вашем вопросе, действительно является XML, который вы загружаете с SimpleXml, например, когда <records>
является корнемузел, то выполнение
$reportDataXmlrecords->records->record
не может работать, потому что $reportDataXmlrecords
уже является корневым узлом, и вам придется пропустить ->records
, если вы хотите перебирать элементы записи в нем.