Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP映射和拆分多维数组_Php_Multidimensional Array_Mapping - Fatal编程技术网

PHP映射和拆分多维数组

PHP映射和拆分多维数组,php,multidimensional-array,mapping,Php,Multidimensional Array,Mapping,我正在研究2个多维阵列: $array1 = array( 0 => array( 'items' => array( 1 => array('79-' => 'abc','80-'=>'123'), 2 => array('79-' => 'Mapping item1','80-'=>'123'), 3 => array('79-' =>

我正在研究2个多维阵列:

$array1 = array(
    0 => array(
        'items' => array(
            1 => array('79-' => 'abc','80-'=>'123'),
            2 => array('79-' => 'Mapping item1','80-'=>'123'),
            3 => array('79-' => 'abc','80-'=>'123')
        )
    ),
    1 => array(
        'items' => array(
            1 => array('79-' => 'Mapping item2','80-'=>'123'),
        )
    )
);
这是第二个阵列:

$array2 = array(
    2 => array(
        "A" => 'Mapping item1',
        "B" => array(1 => 'product1', 2 => 'product2', 3 => 'product3')
    ),
    3 => array(
        "A" => 'Mapping item2',
        "B" => array(1 => 'product4', 2 => 'product5', 3 => 'product6')
    )
);
我试图通过键值79-映射这两个数组,并对数组1进行更改。这是我的密码

foreach ($array1 as $key => $orders) {
    $items = $orders['items'];
    $itemIndex = 1;
    foreach ($items as $k => $item) {
        foreach ($array2 as $row) {
            if (strpos($item['79-'], $row['A']) !== false) {
                foreach ($row['B'] as $ite) {
                    items[ $itemIndex ]['79-'] = $ite;
                    $itemIndex++;
                }
            }
        }
        $itemIndex++;
    }

    $orders['items'] = $items;
    $array1[ $key ] = $orders;
}
我想返回一个数组,如下所示,但我的代码不起作用

$expectedArray = array(
    [0]=> array(
       ['items'] => array(
          [1]=>array('79-'=>'abc','80-'=>'123'),
          [2]=>array('79-'=>'product1','80-'=>'123'),
          [3]=>array('79-'=>'product2','80-'=>'123'),
          [4]=>array('79-'=>'product3','80-'=>'123'),
          [5]=>array('79-'=>'abc','80-'=>'123')
       )
    ),
    [1]=>array(
       ['items'] => array(
          [1]=>array('79-'=>'product4','80-'=>'123'),
          [2]=>array('79-'=>'product5','80-'=>'123'),
          [3]=>array('79-'=>'product6','80-'=>'123'),          
       )
    )
);

任何人都知道如何解决这个问题,请帮助。我已经为此工作了几个小时。

希望这篇文章能有所帮助。这里我们使用的是
foreach
array\u column
array\u map


将[A]更改为[“A”]。。idem B/items[$itemIndex]['79-']到$items/'product6到'product6'我刚刚编辑了键入错误,但这不是解决方案。您能发布预期结果吗?我在理解需要执行的操作时遇到问题。预期的结果是上面的最后一个数组。正如我所检查的,$finalArray不包含$result的值?@Tedxxxx是的,它包含,您可以检查您的预期输出和我的代码段吗?是的,我检查过,最终结果不与$result数组中的值相反,例如“product1”,“product2”等。它不会替换旧数据。哦,您的代码返回正确的结果,但很抱歉,输入数组中有错误。除了'-79',我还有另一个元素'80-',但是对于您的剪接代码,它只返回'-79'。由于我的错误,我将接受你的回答。但是你能帮我解决上面的问题吗。现在,输出结果如下:。但我想在所有已添加的新元素中保留值“80-”。
$column=array_column($array2,"B","A");
foreach ($array1 as $key => $itemsArray)
{
    $finalArray=array();//maintaining a final array
    foreach($itemsArray["items"] as $itemKey => $item)
    {
        if(isset($column[$item["79-"]]))//checking key in the column array
        {
            $result=array_map(function($value) use($item){
               unset($item["79-"]);
               return array("79-"=>$value)+$item;
            },$column[$item["79-"]]);
            $finalArray=$finalArray+$result;//appending array with + operator
        }
        else
        {
            $finalArray[]=$item;
        }
    }
    $array1[$key]["items"]=$finalArray;//overwriting final array to existing one
}
print_r($array1);