Php 如何将for循环转换为foreach循环?

Php 如何将for循环转换为foreach循环?,php,arrays,Php,Arrays,你好,朋友,我有两个数组,我想匹配它们的id,并在新数组中关联它们 这是我的$dizi1 $dizi1 = [ [ 'id' => 1, 'name' => 'özkan', 'surname' => 'özdemir', ], [ 'id' => 2, 'name' => 'çağrı', 'surname' => 'uğurel', ], [ 'id' => 3, 'name' =>

你好,朋友,我有两个数组,我想匹配它们的id,并在新数组中关联它们

这是我的
$dizi1

$dizi1 = [
[
    'id' => 1,
    'name' => 'özkan',
    'surname' => 'özdemir',
],
[
    'id' => 2,
    'name' => 'çağrı',
    'surname' => 'uğurel',
],
[
    'id' => 3,
    'name' => 'can',
    'surname' => 'tokay'
],
[
    'id' => 4,
    'name' => 'lütfü',
    'surname' => 'uzun'
],
[
    'id' => 5,
    'name' => 'ahmet',
    'surname' => 'yeni',
],
[
    'id' => 6,
    'name' => 'rabia',
    'surname' => 'papatya',
],
[
    'id' => 7,
    'name' => 'canan',
    'surname' => 'tokatlı'
],
[
    'id' => 8,
    'name' => 'muhammet',
    'surname' => 'uzundal'
]
];
这是mu
$dizi2

$dizi2 = [
[
    'id' => 2,
    'birthday' => 1993
],
[
    'id' => 3,
    'birthday' => 1990
],
[
    'id' => 4,
    'birthday' => 1989
],
[
    'id' => 1,
    'birthday' => 1987
],
[
    'id' => 5,
    'birthday' => 1993
],
[
    'id' => 7,
    'birthday' => 1990
],
[
    'id' => 6,
    'birthday' => 1989
],
[
    'id' => 8,
    'birthday' => 1987
]
];
然后我尝试定义一个新数组

$newarray = $dizi1;
然后我试了一下

foreach($dizi1 as $k)
{
foreach ($newarray as $i)
{
    if ($newarray[$i]['id'] == $dizi2[$i]['id']) 
    {

        $newarray[$i]['birthday'] = $dizi2[$i]['birthday'];
    }
  }
 }
现在它不起作用了

我必须使用foreach,我也将它用于excel文件


怎么了

使用
array\u search
array\u column
我使用的内部循环
array\u map

$result = array_map (
  function ($item) use($dizi2) { 
    $index = array_search($item['id'], array_column($dizi2, 'id'));
    if($index >= 0){
      $item['birthday'] = $dizi2[$index]['birthday'];
    }
    return $item ;
  },$dizi1
);
print_r($result);

您将得到如下输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => özkan
            [surname] => özdemir
            [birthday] => 1987
        )

    [1] => Array
        (
            [id] => 2
            [name] => çağrı
            [surname] => uğurel
            [birthday] => 1993
        )

    [2] => Array
        (
            [id] => 3
            [name] => can
            [surname] => tokay
            [birthday] => 1990
        )

    [3] => Array
        (
            [id] => 4
            [name] => lütfü
            [surname] => uzun
            [birthday] => 1989
        )

    [4] => Array
        (
            [id] => 5
            [name] => ahmet
            [surname] => yeni
            [birthday] => 1993
        )

    [5] => Array
        (
            [id] => 6
            [name] => rabia
            [surname] => papatya
            [birthday] => 1989
        )

    [6] => Array
        (
            [id] => 7
            [name] => canan
            [surname] => tokatlı
            [birthday] => 1990
        )

    [7] => Array
        (
            [id] => 8
            [name] => muhammet
            [surname] => uzundal
            [birthday] => 1987
        )

)
使用此代码:

foreach($dizi1 as $k)
{
foreach ($dizi2 as $i)
{
    if ($i['id']==$k['id']) 
    {

        $newarray[$i['id']]['birthday'] = $i['birthday'];
    }
  }
 }
echo "<pre>";
print_r($newarray);
试试这个:

[
    [
            [id] => 1,
            [name] => özkan,
            [surname] => özdemir,
            [birthday] => 1987
    ],
    [
            [id] => 2,
            [name] => çağrı,
            [surname] => uğurel,
            [birthday] => 1993
    ],
    [
            [id] => 3,
            [name] => can,
            [surname] => tokay,
            [birthday] => 1990
    ],
    [
            [id] => 4,
            [name] => lütfü,
            [surname] => uzun,
            [birthday] => 1989
    ],
    [
            [id] => 5,
            [name] => ahmet,
            [surname] => yeni,
            [birthday] => 1993
    ],
    [
            [id] => 6,
            [name] => rabia,
            [surname] => papatya,
            [birthday] => 1989
    ],
    [
            [id] => 7,
            [name] => canan,
            [surname] => tokatlı,
            [birthday] => 1990
    ],
    [
            [id] => 8,
            [birthday] => 1987
    ]
]
您将获得以下输出:


谢谢你,先生,但我是初级开发者。例如,我不能理解使用函数或数组映射函数。我必须使用每一种表演方式。谢谢你的关心!:)@Cugurel:您想要与上面相同的输出吗?您正在设置if
$dizi1['birth']
匹配的值
$dizi2['birth']
。这等于给出指示,进入所有房间,如果墙是黄色的,就把它漆成黄色。这是一个毫无意义的练习,因为它不提供已更改的状态。
$newarray = [];
foreach($dizi1 as $d1){
   foreach ($dizi2 as $d2){
      if ($d1['id'] == $d2['id']){
         $newarray[] = array_merge($d1, $d2);
         break;
      }else{
         $newarray[] = $d1;
         $newarray[] = $d2;
      }
   }
}
[
    [
            [id] => 1,
            [name] => özkan,
            [surname] => özdemir,
            [birthday] => 1987
    ],
    [
            [id] => 2,
            [name] => çağrı,
            [surname] => uğurel,
            [birthday] => 1993
    ],
    [
            [id] => 3,
            [name] => can,
            [surname] => tokay,
            [birthday] => 1990
    ],
    [
            [id] => 4,
            [name] => lütfü,
            [surname] => uzun,
            [birthday] => 1989
    ],
    [
            [id] => 5,
            [name] => ahmet,
            [surname] => yeni,
            [birthday] => 1993
    ],
    [
            [id] => 6,
            [name] => rabia,
            [surname] => papatya,
            [birthday] => 1989
    ],
    [
            [id] => 7,
            [name] => canan,
            [surname] => tokatlı,
            [birthday] => 1990
    ],
    [
            [id] => 8,
            [birthday] => 1987
    ]
]