【问题标题】:Difference between string arrays in PHP [duplicate]PHP中字符串数组之间的区别[重复]
【发布时间】:2013-11-06 04:33:54
【问题描述】:

给定两个字符串数组,A 和 B。

B 包含 A 中的所有元素,并且有一个额外的成员,例如:

A = ['dog', 'cat', 'monkey]
B = ['cat', 'rat', 'dog', 'monkey']

我需要编写一个函数来使用O(n) 在 B 中查找多余的字符串。请帮忙!

更新:我知道使用 PHP 内置函数 array_diff() 可以实现差异。

【问题讨论】:

标签: php


【解决方案1】:

您正在寻找内置函数array_diff

$A = array('dog', 'cat', 'monkey');
$B = array('cat', 'rat', 'dog', 'monkey');
$difference = array_diff($B, $A);

Test here

Official documentation

【讨论】:

  • 我不想要内置的 PHP 函数。我确实提到过使用大 O 表示法。
  • 为什么要重新发明轮子?这是最有效的解决方案,因为内置 PHP 函数经过大量测试和优化。
  • @Joren 显然这是一个学习练习。 array_diff 并不是所有语言都可以开箱即用的——如今人们在不了解实现的情况下太容易使用现有代码。是的,使用内部功能会更快,也是最佳实践,但询问如何它的工作原理以及替代方案肯定不是一件坏事!
【解决方案2】:

希望对你有帮助

$A = array('dog', 'cat', 'monkey');
$B = array('cat', 'rat', 'dog', 'monkey');

function arrayDiff($A, $B) {
    $out = array();
    foreach($B as $b) $out[$b] = 1;
    foreach($A as $a) unset($out[$a]);
    return array_keys($out);
}

print_r(arrayDiff($A, $B));

如果您不想使用array_keys() 更改功能如下

function arrayDiff($A, $B) {
    $res = $out = array();
    foreach($A as $a) $out[$a] = 1;
    foreach($B as $b) if(!isset($out[$b])) $res[] = $b;
    return $res;
}

【讨论】:

猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 2011-03-18
  • 2016-07-14
  • 2020-03-25
  • 2016-10-22
相关资源
最近更新 更多