编辑代码

<?php

function mapExtraKey($r, $c)
{
    // 里面表示取第一个#号前面的内容
    $r[strstr($c, '#', true)] = $c;
    return $r;
}

$arr1 = array("a#18#高中", "b#22#本科", "c#25#硕士");
$arr2 = array("b#eric#男", "a#huang#男", "c#liu#女");

// 提取出第一部分#的作为键
$arr1 = array_reduce($arr1, 'mapExtraKey', []);
// 做同样操作
$arr2 = array_reduce($arr2, 'mapExtraKey', []);

// var_dump($arr1);

//                        �� 注意引用
foreach ($arr1 as $key => &$item) {
    // 如果arr2中不存在对应的就继续下一个循环
    if (!isset($arr2[$key])) {
        continue;
    }

    // 取出arr2中,第一个 # 号以后的内容
    $str  = strstr($arr2[$key], '#');
    // 拼接到当前
    $item .= $str;
    // 转换第一个,也可以用正则,但是这样效率更高
    $item = sprintf('**%s**%s', strstr($item, '#', true), strstr($item, '#'));
}
// 去除引用
unset($item);
// 重新取数组值
$arr3 = array_values($arr1);

var_dump($arr3);