【问题标题】:Any other better logic for this programme该程序的任何其他更好的逻辑
【发布时间】:2017-06-14 18:00:04
【问题描述】:

今天在一次采访中,我在不使用任何内置函数(例如 in_array 等)的情况下解决了以下问题。我能够解决程序,但他们告诉我有没有更好的方法,而且他们告诉我总代码只有最多 7 行。所以谁能告诉我比这更好的方法:-

<?php
$a = array(1,3,5,2,1,5,11,16);
$b = array(1,4,3,11,12,5,7,18);
$final = [];
for($i=0;$i<count($a);$i++){
    $flag = 0;
    if($i==0){
        $final[] = $a[$i];
    } else {
        for($j=0;$j<count($final);$j++){

            if($a[$i] == $final[$j]){
                $flag = 1;
            }

        }
        if($flag==0){
            $final[] = $a[$i];
        }
        for($k=0;$k<count($final);$k++){
            if($b[$i] == $final[$k]){
                $flag = 1;
            }
        }
        if($flag==0){
            $final[] = $b[$i];
        }


    }

}
echo '<pre>';
print_r($final);

结果将是包含两个唯一数组的最终数组,例如

Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 2 [5] => 11 [6] => 16 [7] => 18 )

【问题讨论】:

  • 它应该做什么?
  • 问题是什么?
  • 对不起,我更新了我的问题,请立即查看
  • 上面是你做的代码。最初的代码是什么?只有那两个数组?还是三个数组?
  • 关于改进工作代码的问题属于Code Review

标签: php logic


【解决方案1】:

在不使用内置函数的情况下,您可以这样做:将值收集为键(因此它们是唯一的),然后将这些键作为值放回最终数组中:

$a = array(1,3,5,2,1,5,11,16);
$b = array(1,4,3,11,12,5,7,18);

foreach($a as $v) $keys[$v] = 1;
foreach($b as $v) $keys[$v] = 1;
foreach($keys as $k => $v) $final[] = $k;

echo '<pre>';
print_r($final);

查看它在eval.in 上运行。

【讨论】:

  • 您期待什么? ;-)
  • 我以为代码会更大,但你用一种简短有效的方法完成了
【解决方案2】:

只需将键设置为值,它们就会覆盖。如果数组长度相同:

foreach($a as $k => $v) {
    $final[$v] = $v;
    $final[$b[$k]] = $b[$k];
}

如果不是,那么对每个数组都这样做:

foreach(array($a, $b) as $c) {
    foreach($c as $v) {
        $final[$v] = $v;
    }
}

顺序和键不会相同,但这不是要求。

【讨论】:

  • 为不同尺寸添加了另一个。
  • 这里的结果是一个关联数组,而不是标准索引数组,其中第一个值的键为 0,如 OP 所需的输出所示。也可以反对使用array()
  • @trincot 我知道,但它是获得 包含两者的唯一数组的最终数组的最简单实现方式
  • 但以上示例都没有返回所需的格式:)
  • @RokoC.Buljan 例如表示例如,而不是要求的格式 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多