PHP的foreach还有什么更优雅的写法?

     $arr = [1,2,4];
     $arr_name = [];
     foreach ($arr_name as $key => $val) {
        if ($val == 1) {
            $arr_name[] = '小明';
        }else if ($val == 2) {
            $arr_name[] =  '小白';
        }else if ($val == 3) {
            $arr_name[] =  '小汪';
        }else if ($val == 4) {
            $arr_name[] =  '小哈';
        }
    }
    //得到结果是 $arr_name = ['小明','小白','小哈'];

还有没有其他写法?

阅读 2.7k
2 个回答
<?php
// 1、使用数组键交集(缺陷,重复出现的搜寻不会出现)
// 映射关系
$arr1 = [1 => '小名', 2 => '小白', 3 => '小汪', 4 => '小哈'];
// 要搜寻的
$search = [1, 2, 3, 3, 4, 4, 4, 4,];
$tmp = array_fill_keys($search, '');

$rs = array_intersect_key($arr1, $tmp);

var_dump($rs);
/**
array(4) {
  [1] =>
  string(6) "小名"
  [2] =>
  string(6) "小白"
  [3] =>
  string(6) "小汪"
  [4] =>
  string(6) "小哈"
}
*/


// 2、先用数字和文本建立索引,然后使用 array_map 遍历
$rs2 = array_map(function ($item) use ($arr1) {
    return $arr1[$item] ?? $item;
}, $search);

var_dump($rs2);
/**
array(8) {
  [0] =>
  string(6) "小名"
  [1] =>
  string(6) "小白"
  [2] =>
  string(6) "小汪"
  [3] =>
  string(6) "小汪"
  [4] =>
  string(6) "小哈"
  [5] =>
  string(6) "小哈"
  [6] =>
  string(6) "小哈"
  [7] =>
  string(6) "小哈"
}
*/
$arr = [1,2,4];
$names = ['小明', '小白', '小汪', '小哈'];
$arr_name = array_map(function ($id) use ($names) {
  return $names[$id - 1];  
}, $arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题