【问题标题】:How to parse this multi dimensional array如何解析这个多维数组
【发布时间】:2015-11-26 18:48:50
【问题描述】:

我已经尝试了我所知道的一切,但我完全无法解析这个多维数组,以便我可以从内部和外部数组中获取键和值以保存到数据库。

array:10 [▼
  "_token" => "aHgDik0zuDxxBqYgbi0ZTkaPyG3CVwk5WO7LtU6u"
  "contractor_invoice_no" => ""
  "date" => "26-11-2015"
  "contractor_reference" => "sdfsdf"
  "workorder_reference" => "151 alandale"
  "square_installed" => "455"
  "square_invoice" => "677"
  "other_work_" => array:3 [▶]
  "other_invoice_" => array:3 [▶]
  "comments" => "comments"
]

我尝试过嵌套的 foreach 循环,但在回显外部数组的值时,我总是得到一个数组到字符串的转换错误。我不会向你展示我所做的每一次尝试,但下面的这个尝试给了我所有的外部数组,但是在 echo 语句上显示了一个错误,它告诉我它在到达内部数组时失败了。

foreach($invoice as $key=> $value)
{
    echo " Data $value  Key $key";   // Array to String conversion error here ! 

    if (is_array($value) || is_object($value))
    {
        foreach ($value as $sample=>$data)
        {
            echo "Key $sample Data $data";
        }
    }
}

我该如何进行这项工作?

非常感谢!

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    您收到此消息,因为某些值是 arrays,例如'其他工作'

    可以迭代:

    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr))
    

    Iterating over a complex Associative Array in PHP

    获取key-value-pair并将其推送到结果数组中,如:

    function getData($arr) 
    {
        $res = array();
        $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
        foreach($iterator as $key=>$value) {
            $pair = array($key, $value);
            array_push($res, $pair);
        }
        return $res;
    }
    
    $res = getData($arr); // All key-value-pairs are stored in $res
    // Key: $res[n][0]
    // Value: $res[n][1]
    

    完整示例

    $arr = [
      "_token" => "aHgDik0zuDxxBqYgbi0ZTkaPyG3CVwk5WO7LtU6u",
      "contractor_invoice_no" => "",
      "date" => "26-11-2015",
      "contractor_reference" => "sdfsdf",
      "workorder_reference" => "151 alandale",
      "square_installed" => "455",
      "square_invoice" => "677",
      "other_work_" => array(1, array('a', 'b', array('one' => 'path'))),
      "other_invoice_" => array(1, 2, 3),
      "comments" => "comments"
    ];
    
    function getData($arr) 
    {
        $res = array();
        $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
        foreach($iterator as $key=>$value) {
            $pair = array($key, $value);
            array_push($res, $pair);
        }
        return $res;
    }
    
    $res = getData($arr); // All key-value-pairs are stored in $res
    // Key: $res[n][0]
    // Value: $res[n][1]
    
    // Output the pairs
    $max = count($res);
    for($i = 0; $i < $max; $i++)
    {
        echo "key: " . $res[$i][0] . ", value: " . $res[$i][1] . PHP_EOL;
    }
    

    可以通过$res 访问所有内容。 $res[n][0] 是键,$res[n][1] 是对应的值。如果您有多维数组但您不知道它们的级别,则此解决方案是一个解决方案。


    如果你知道数组是一个简单的数组,比如

    array('one', 'two', 'three');
    

    你可以使用implode方法把它变成一个字符串,比如

    $res = array();
    
    foreach ($arr as $key => $value) {
        if(is_array($value))
        {
            $value = implode(" ", $value);
        }
        $pair = array($key, $value);
        array_push($res, $pair);
    }
    

    我希望这会有所帮助!

    【讨论】:

    • 谢谢。是的,我知道 print_r 但这并不能帮助我将我的值批量上传到我的数据库中。我需要将值作为一系列字符串从内部数组中取出。
    • 非常感谢!我将不得不研究这个,因为我完全不熟悉这种方法。
    • 我再次更新了我的答案。如果答案对您有所帮助,请随时接受并支持我的答案。
    • 嗨彼得 - 非常感谢您的慷慨时间和辛勤工作!是的,我会接受并投票 - 干杯!
    猜你喜欢
    • 2014-02-08
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多