вставка объекта в массив объектов php - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь написать скрипт php, который будет вставлять объект в массив объектов, который изначально имеет формат XML. Мне нужно вставить объект по указанному индексу, а затем иметь возможность переписать файл XML, из которого данные были извлечены с обновленным объектом. Вот структура моего XML

<?xml version="1.0" encoding="UTF-8"?>
<Bars>
    <Bar>
        <BarName>Kam's</BarName>
        <bar_id>0</bar_id>
        <Bartenders>
            <Bartender>
                <fname>Max</fname>
                <lname>Vest</lname>
                <imageURL>http://uofi-bars.com/bartenderImages/maxvest.jpg</imageURL>
                <shift>2</shift>
            </Bartender>
        </Bartenders>
        <Events>
            <Event>
                <EventName>Kams event</EventName>
                <date>08/10/1989</date>
            </Event>
         </Events>
         <Specials>
            <Special>Kam's Special 1</Special>
            <Special>Kam's Special 2</Special>
         </Specials>
    </Bar>

Другими словами, если у меня есть бармен, который работает за баром с идентификатором bar_id = 0, мне нужно иметь возможность вставить этого бармена в массив барменов для этого конкретного бара.

Я использую следующий php-код для создания массивов из XML:

function objectsIntoArray($arrObjData, $arrSkipIndices = array())
{
    $arrData = array();

    // if input is object, convert into array
    if (is_object($arrObjData)) {
        $arrObjData = get_object_vars($arrObjData);
    }

    if (is_array($arrObjData)) {
        foreach ($arrObjData as $index => $value) {
            if (is_object($value) || is_array($value)) {
                $value = objectsIntoArray($value, $arrSkipIndices); // recursive call
            }
            if (in_array($index, $arrSkipIndices)) {
                continue;
            }
            $arrData[$index] = $value;
        }
    }
    return $arrData;
}
$xmlUrl = "Bars.xml"; // XML 
    $xmlStr = file_get_contents($xmlUrl);
    $xmlObj = simplexml_load_string($xmlStr);
    $arrXml = objectsIntoArray($xmlObj);
    print_r($arrXml);

Полагаю, я просто не знаю, как ссылаться на этот массив объектов в массиве объектов ... Любая помощь будет принята с благодарностью!

Спасибо!

1 Ответ

2 голосов
/ 28 февраля 2012

если вы просто замените свой код:

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl);
$xmlObj = simplexml_load_string($xmlStr);
$arrXml = objectsIntoArray($xmlObj);
print_r($arrXml);

на это:

$xmlUrl = "Bars.xml"; // XML 
$xmlStr = file_get_contents($xmlUrl);
$xml = new SimpleXMLElement($xmlStr);
$bartenders = $xml->xpath('//Bartenders');
$new_bartender = $bartenders[0]->addChild('Bartender');
$new_bartender->fname = 'test1';
$new_bartender->lname = 'test2';
$new_bartender->imgURL = 'http://test.com';
$new_bartender->shift = '0';
print_r($bartenders);

это должно сработать, просто замените значения соответствующими значениями :) я надеюсь, что это поможет!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...