访问没有索引的数组的第一个元素

时间:2011-10-18 14:39:23

标签: php arrays

我有一个xml文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <transaction dsxml_version="1.08">
    <action>action1</action>
    <action>action2</action>
    </transaction>

如果我使用simplexml,我可以使用以下代码

访问第一个“动作”
    $xml = simplexml_load_string($xml_content);
    echo $xml->action; // Write "action1"
    echo $xml->action[0]; // Write "action1"
    echo $xml->action[1]; // Write "action2"

现在我创建一个数组并尝试以相同的方式访问它。但它确实有效。

我们有一个庞大的php skipt,它使用包含逻辑错误的简单xml。如果我可以模拟简单的xml,我可以在一个位置修复此错误

5 个答案:

答案 0 :(得分:1)

试试这个:

current($xml->action);

答案 1 :(得分:1)

echo array_shift(array_slice($xml->action, 0, 1));

或者如果您不担心损坏原始数组$xml->action,您可以使用以下

echo array_shift($xml->action);

使用array_shift将保证您获得第一个元素,如果它是编号或关联的。

答案 2 :(得分:1)

您可以创建模拟您正在寻找的行为的假冒或模拟对象:

$action = new SimpleXMLArrayMock($action_array);

$xml->action = $action;

echo "\nFake:\n";
echo $xml->action, "\n";    // Write "action1"
echo $xml->action[0], "\n"; // Write "action1"
echo $xml->action[1], "\n"; // Write "action2"


/**
 * Mock SimpleXML array-like behavior
 */
class SimpleXMLArrayMock extends ArrayObject
{
    private $first;
    public function __construct(array $array)
    {
        $this->first = (string) $array[0];
        parent::__construct($array);
    }
    public function __toString()
    {
        return $this->first;
    }

}

Demo

答案 3 :(得分:0)

使用xpath,以便找到元素

答案 4 :(得分:0)

这样可行:

foreach($myarray as $key => $val)
{
    print $val;
    //if you don't need the rest of the elements:
    break;
}

<强>加了:

你甚至可以使它成为一个功能:

function get_first_element($myarray)
{
    foreach($myarray as $key => $val)
    {
        return $val;
    }
}