代码优雅度研究

2020-11-26 19:38:31 +08:00
 lovecy

示例的两种写法,哪种更优雅嘞,或者大佬们有更好的写法- -

前置说明

首先有一个非常大的关联数组

$replace_data = array(
    1 => 11,
    3 => 33,
    // 后面还有很多
);

过滤并替换下面这个二维数组

$input = array(
    array(1, 0),
    array(1, 2),
    array(2, 0),
    array(3, 1),
    array(3, 4),
);

对于每一个子数组按以下规则过滤

  1. index=0 的数据如果不在 replace_data 里,丢弃
  2. index=1 的数据如果不为 0,并且不在 replace_data 里,丢弃
  3. 根据 replace_data,修改 index=0 的数据,若 index=1 的数据不为 0,也得修改

期待的过滤结果

$output = array(
    array('11', '0'),
    array('33', '11'),
);

示例代码

示例代码 1

$output = array();
foreach ($input as $v) {
    if (empty($replace_data[$v[0]])) {
        continue;
    }
    if (($v[1] !== 0) && empty($replace_data[$v[1]])) {
        continue;
    }
    $v[0] = $replace_data[$v[0]];
    if ($v[1] !== 0) {
        $v[1] = $replace_data[$v[1]];
    }
    $output[] = $v;
}

示例代码 2

$output = array();
foreach ($input as $v) {
    if (empty($replace_data[$v[0]])) {
        continue;
    }
    if (($v[1] !== 0) && empty($replace_data[$v[1]])) {
        continue;
    }
    $v[0] = $replace_data[$v[0]];
    if ($v[1] !== 0) {
        $v[1] = $replace_data[$v[1]];
    }
    $output[] = $v;
}
1416 次点击
所在节点    PHP
3 条回复
lovecy
2020-11-26 19:53:12 +08:00
不好意思,第二个代码放错了,放成一样的了,但是无法 append,不知道为啥。
两个我感觉都很不优雅,寻求一个更优雅的写法
v11exboy
2021-01-14 17:52:47 +08:00
优雅?粗暴就完了!

$output = array();
foreach ($input as $value) {
if (!empty($replace_data[$value[0]]) && (!$value[1] || !empty($replace_data[$value[1]]))) {
$output[] = array($replace_data[$value[0]], $value[1] ? $replace_data[$value[1]] : 0);
}
}
lovecy
2021-01-15 14:38:05 +08:00
@v11exboy 见过很多 BUG 都是,if 写太长,后面的判断语句就算写错了有时候也检测不到。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/729611

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX