如何解析这个多维数组

时间:2015-11-26 18:48:51

标签: php multidimensional-array

我已经尝试了所有我知道的东西,并且我完全没有解析这个多维数组,因此我可以从内部和外部数组中获取密钥和值以保存到数据库。

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";
        }
    }
}

如何使这项工作?

非常感谢!

1 个答案:

答案 0 :(得分:1)

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

可以迭代:

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

Iterating over a complex Associative Array in PHP

获取键值对并将其推送到结果数组中,如:

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);
}

我希望这有帮助!