FOR 循环需要更多的重复次数才能得到我需要的结果

发布于 2024-11-19 10:34:59 字数 737 浏览 2 评论 0原文

我有一个问题。在我看来,这应该可以正常工作:

for($i = 0; $i < count($tags); $i++){
        if(in_array($tags[$i], $str)){
            for($a = 0; $a < count($str); $a++){
                if($tags[$i] == $str[$a]){
                    unset($str[$a]);
                }
            }
        }
    }

str 是一个由 1, 3, 4, 5, 500, 501 组成的数组。tags

是一个由 4, 5, 500, 501 组成的数组。

结果应该是 1, 3。结果是1,3,500,501。

经过实验,我发现这段代码可以工作,但不稳定,在我看来:

for($i = 0; $i < count($str) + count($tags); $i++){
        for($a = 0; $a < count($tags); $a++){
            if ($tags[$a] == $str[$i]) {
                unset($str[$i]);
            }
        }
        $a = 0;
    }

我做错了什么?

I've got a problem. In my opinion this should work fine:

for($i = 0; $i < count($tags); $i++){
        if(in_array($tags[$i], $str)){
            for($a = 0; $a < count($str); $a++){
                if($tags[$i] == $str[$a]){
                    unset($str[$a]);
                }
            }
        }
    }

str is an array consisting of 1, 3, 4, 5, 500, 501.

tags is an array consisting of 4, 5, 500, 501.

The result should be 1, 3. The result is 1, 3, 500, 501.

After experimenting, I found out that this code works but is unstable, in my opinion:

for($i = 0; $i < count($str) + count($tags); $i++){
        for($a = 0; $a < count($tags); $a++){
            if ($tags[$a] == $str[$i]) {
                unset($str[$i]);
            }
        }
        $a = 0;
    }

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

余罪 2024-11-26 10:35:00

当你可以简单地执行以下操作时,代码太多了:

$difference = array_diff($tags, $str);

Far too much code, when you could simply do:

$difference = array_diff($tags, $str);
攀登最高峰 2024-11-26 10:35:00

假设您没有使用 array_diff

  1. 除非您有非常令人信服的理由,否则 foreach 更好。您不需要计数,您正在处理数组的实际键。
  2. 内置数组函数是您的朋友。 array_search 在迭代方面比最优化的 PHP 代码要好得多。
  3. While 循环可以让你的生活更美好:-)

示例:

foreach( $tags as $tag )
{
    while( ( $key = array_search( $tag, $str ) ) !== FALSE )
    {
        unset( $str[ $key ] );
    }
}

Assuming that you're not using array_diff.

  1. Unless you have an extremely compelling reason, foreach is simply better. You don't need count and you're dealing with the actual keys of the array.
  2. The built in array functions are your friends. array_search is far better at iterating than the most optimized PHP code.
  3. While loops can make your life better :-)

Example:

foreach( $tags as $tag )
{
    while( ( $key = array_search( $tag, $str ) ) !== FALSE )
    {
        unset( $str[ $key ] );
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文