为了账号安全,请及时绑定邮箱和手机立即绑定

一个php的面试题,大家看看

一个php的面试题,大家看看

MMMHUHU 2018-07-31 20:10:25
$listData = [    '111' => ['a', 'b', 'c', 'a'],    '222' => ['d', 'e', 'f', 'f', 'b'],    '333' => ['g', 'h'],    '444' => ['i', 'j'],    ...];定义一个函数,传入$listData如果111里面的元素,和 222/333/444... 里面的元素有重复,返回false 如果222里面的元素,和 111/333/444... 里面的元素有重复,返回false 如果333里面的元素,和 111/222/444... 里面的元素有重复,返回false 如果 ...允许 111/222/333/444 自己里面的元素重复,返回true 其他情况返回true已知:$listData长度未知111/222/333/444... 的长度未知111/222/333/444... 里的元素为字符串和数字
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

我对子数组的定义是像 ['a', 'b', 'c', 'a'] 这样的单个数组。

我的答案:

$result = array();

foreach ($listData as $line) {

    //子数组内部去重,再组装回原来的格式

    $result[] = array_unique($line);

}


//子数组先去重再合并的结果数量 和 先合并子数组再去重的结果数量 做比较。

//如果是相同的,意味着不存在跨子数组的重复,只存在子数组内部重复,所以`True`

var_dump(count(array_merge(...$result)) === count(array_unique(array_merge(...$listData))));

我这个答案调用系统函数次数比较多,看起来简洁一些,但是PHP array_xxx 这类函数很大一部分性能是不具备优势的,如果不用这些函数,能相对程度提高运行效率。

方便理解的辅助参考信息:

原始数据:

$listData = [

    '111' => ['a', 'b', 'c', 'a'],

    '222' => ['d', 'e', 'f', 'f', 'b'],

    '333' => ['g', 'h'],

    '444' => ['i', 'j']

];

然后 $result 最终是这样的:

$listData = [

        '111' => ['a', 'b', 'c'],

        '222' => ['d', 'e', 'f', 'b'],

        '333' => ['g', 'h'],

        '444' => ['i', 'j']

];

子数组先去重再合并的结果

Array(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
    [5] => f
    [6] => b
    [7] => g
    [8] => h
    [9] => i
    [10] => j
)

用于和上面进行数量(数组元素数量)比较的,所谓的“先合并子数组再去重的结果”:

Array(
    [0] => a
    [1] => b
    [2] => c
    [4] => d
    [5] => e
    [6] => f
    [9] => g
    [10] => h
    [11] => i
    [12] => j
)


查看完整回答
反对 回复 2018-08-06
?
POPMUISE

TA贡献1765条经验 获得超5个赞

function check($arr)

{

  $chk = [];

  foreach ($arr as $k => $v)

    foreach ($v as $i)

    {

      if (isset($chk[$i] && $chk[$i] != $k)

        return false;

      $chk[$i] = $k;

    }

  return true;

}

爪机码字,应该是效率最高的,自己调试下。


查看完整回答
反对 回复 2018-08-06
  • 2 回答
  • 0 关注
  • 1057 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信