在PHP中将相同的键推送到关联数组

时间:2015-08-27 12:58:20

标签: php arrays merge

我试图在PHP中将数组添加到关联数组中。我知道这不是你应该如何使用密钥,而是我将数组解析为需要相同<line>标记的XML。

所需数组:

array(
    'line' => array(
        // Ean-artikelcode
        'Article_Eancode' => 8710624618216,
        // Leveranciersartikelcode
        'Article_Supplier_Partno' => 22304
    ),

    'line' => array(
        'Article_Eancode' => 8710622648216,
        'Article_Supplier_Partno' => 22304
    )
);

我正试图使用​​此代码:

$artikelenFormatted = array();
$artikelen          = array(
    'a',
    'b',
    'c'
);
foreach ($artikelen as $art) {
    $artikelenFormatted['line'] = array(
        "Article_Eancode" => "a",
        "Article_Supplier_Partno" => "b"
    );
}

产生:

array (size=1)
  'line' => 
    array (size=2)
      'Article_Eancode' => string 'a' (length=1)
      'Article_Supplier_Partno' => string 'b' (length=1)

因为$array['line']不断被覆盖,所以没有多个条目

我该怎么做?

编辑:所需XML的示例

<Lines>
  <Line>
    <Article_Eancode>87XXXXXXXXXXX</Article_Eancode>
    <Article_Supplier_Partno>22304</Article_Supplier_Partno>
  </Line>
  <Line>
    <Article_Eancode>87XXXXXXXXXXX</Article_Eancode>
    <Article_Supplier_Partno>22303</Article_Supplier_Partno>
  </Line>
  <Line>
    <Article_Eancode>87XXXXXXXXXXX</Article_Eancode>
    <Article_Supplier_Partno>22324</Article_Supplier_Partno>
  </Line>
  <Line>
    <Article_Eancode>87XXXXXXXXXXX</Article_Eancode>
    <Article_Supplier_Partno>22305</Article_Supplier_Partno>
  </Line>
  <Line>
    <Article_Eancode>87XXXXXXXXXXX</Article_Eancode>
    <Article_Supplier_Partno>22323</Article_Supplier_Partno>
  </Line>
</Lines>

3 个答案:

答案 0 :(得分:1)

数组不能有两个(或更多)相同的键。考虑; $array['line']会返回什么?

您正在寻找的是:

foreach ($artikelen as $art) {
    $artikelenFormatted['line'][] = array(
        "Article_Eancode" => "a",
        "Article_Supplier_Partno" => "b"
    );
}

请注意[]之后的['line']。这将使$artikelenFormatted['line']成为一个数组,其中每个元素都是数据的数组。

修改

要使其与XML一起使用,请使用以下命令:

foreach ($artikelen as $art) {
    $artikelenFormatted[]['line'] = array(
        "Article_Eancode" => "a",
        "Article_Supplier_Partno" => "b"
    );
}

修改您引用的array_to_xml函数:

function new_array_to_xml( $data, &$xml_data ) {
    foreach( $data as $key => $value ) {
        if( is_array($value) ) {
            if( is_numeric($key) ){
            array_to_xml($value, $xml_data);
            }
            else
            {
            $subnode = $xml_data->addChild($key);
            array_to_xml($value, $subnode);
            }
        } else {
            $xml_data->addChild("$key",htmlspecialchars("$value"));
        }
     }
}

答案 1 :(得分:1)

我通过使用:

解决了这个问题
foreach ( $artikelen as $art ) {
            $artikelenFormatted [] = array (
                    "Article_Eancode" => "a",
                    "Article_Supplier_Partno" => "b" 
            );

哪个会输出

array (size=2)
  0 => 
    array (size=2)
      'Article_Eancode' => string 'a' (length=1)
      'Article_Supplier_Partno' => string 'b' (length=1)
  1 => 
    array (size=2)
      'Article_Eancode' => string 'a' (length=1)
      'Article_Supplier_Partno' => string 'b' (length=1)

编辑我的array_to_xml()功能,将数字键更改为字符串&#39; line&#39;它产生正确的XML

private function array_to_xml($entries, &$tmpXML) {
        foreach ( $entries as $key => $value ) {
            if (is_array ( $value )) {
                if (! is_numeric ( $key )) {
                    $subnode = $tmpXML->addChild ( "$key" );
                    $this->array_to_xml ( $value, $subnode );
                } else {
                    $subnode = $tmpXML->addChild ( "line" );
                    $this->array_to_xml ( $value, $subnode );
                }
            } else {
                $tmpXML->addChild ( "$key", htmlspecialchars ( "$value" ) );
            }
        }
    }

感谢大家的输入

答案 2 :(得分:0)

你不能拥有相同的钥匙,但你可以拥有:

编辑1:

array(
        [0] => array(
           'line' => array(
              // Ean-artikelcode
              'Article_Eancode' => 8710624618216,
              // Leveranciersartikelcode
              'Article_Supplier_Partno' => 22304
        )),
        [1] => array(
          'line' => array(
             'Article_Eancode' => 8710622648216,
             'Article_Supplier_Partno' => 22304
        ))
   );

你可以这样做:

    foreach ($artikelen as $art) {
    $artikelenFormatted[] = array(
       'line' => array(
        "Article_Eancode" => "a",
        "Article_Supplier_Partno" => "b"
    );
   }