亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個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條經驗 獲得超6個贊

我對子數組的定義是像 ['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 關注
  • 1099 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號