多维数组转换和路径添加

时间:2016-07-15 09:33:53

标签: php arrays multidimensional-array

我有一个看起来像这样的数组: http://pastebin.com/raw/myuRm6cs

我想将此数组转换为一个级别并添加路径键,例如:

Array
(
    [0] => Array
        (
            [path] => Niebieski|S|Bawelna
            [price] => 
            [warehouse] => 
            [send] => dst
        )
    [1] => Array
        (
            [path] => Niebieski|S|Poliester
            [price] => 
            [warehouse] => 
            [send] => dst
        )
    [2] => Array
        (
            [path] => Niebieski|S|Skora
            [price] => 
            [warehouse] => 
            [send] => dst
        )

-

    $ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($types));
    $results = array();
    foreach ($ritit as $leafValue) {
        $path = array();
        foreach (range(0, $ritit->getDepth()) as $depth) {
            $path[] = $ritit->getSubIterator($depth)->key();
        }
        $results[] = join('|', $path);
    }

此代码创建数组的路径,但我不知道如何使用它们来获得效果。

2 个答案:

答案 0 :(得分:0)

没有ArrayIterator,它非常容易

$results = array();

foreach ($types as $k1=>$v1) 
   foreach ($v1 as $k2=>$v2) 
      foreach ($v2 as $k3=>$v3)      
         $results[] = array('parh' => $k1 . '|' . $k2 . '|' . $k3) + $v3;      

print_r($results); 

答案 1 :(得分:0)

$ritit = new RecursiveIteratorIterator(new RecursiveArrayIterator($a));
$results = array();
foreach ($ritit as  $key => $leafValue) {
    $path = array();
    foreach (range(0, $ritit->getDepth()-1) as $depth) {
        $path[] = $ritit->getSubIterator($depth)->key();
        $b = $ritit->getSubIterator($depth)->current();
    }
    $b['path'] = join('|', $path);
    $results[] = $b;
}
print_r($results);

但是有一个错误