Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
487 views
in Technique[技术] by (71.8m points)

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 = ['小明','小白','小哈'];

还有没有其他写法?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
<?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) "小哈"
}
*/

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...