簡體   English   中英

將相同的鍵推入PHP中的關聯數組

[英]Push same key to associative array in PHP

我正在嘗試將數組添加到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>

數組不能具有兩個(或多個)相同的鍵。 考慮; $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"));
        }
     }
}

我通過使用以下方法解決了這個問題:

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()函數以將數字鍵更改為字符串“ line”,從而產生正確的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" ) );
            }
        }
    }

感謝大家的投入

您不能具有相同的鍵,但可以具有:

編輯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"
    );
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM