Почему мой цикл работает только до половины таблицы?Я понятия не имею - PullRequest
0 голосов
/ 10 июня 2019

Я хочу написать программу, которая будет делать 2 массива (один с целыми числами, а второй со строками) из одного массива (смешанные строки и целые числа. У меня проблема с моим циклом, я думаю, потому что кажется, что он работает толькодо половины таблицы.

function check(&$tab,&$tabstr,&$tabint){
    for($i=0;$i<count($tab);$i++){
        if(is_numeric($tab[$i])==1){
                $tabint[]=$tab[$i];
                unset($tab[$i]);
        }else
                $tabstr[]=$tab[$i];
                 unset($tab[$i]);
    }
}

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Здесь. Если не задана переменная $tab, значение count($tab) изменится, и цикл будет тормозиться. Так что присвойте переменной переменную $ tab, затем проверьте, вот код

function check(&$tab,&$tabstr,&$tabint){
    $length = count($tab);
    for($i=0;$i<$length;$i++){
        if(is_numeric($tab[$i])==1){
                $tabint[]=$tab[$i];
                unset($tab[$i]);
        }else{
                $tabstr[]=$tab[$i];
                 unset($tab[$i]);
        }
    }
}
1 голос
/ 10 июня 2019

Я считаю, что вы не должны сбрасывать ($ tab [i]) в цикле, я бы сбросил $ tab после завершения цикла.Это может испортить позиции и вашу ценность.Также я думаю, что остальное не открывается и не закрывается {} должным образом.

Я сделаю так:

function check(&$tab,&$tabstr,&$tabint) {
    $tabint= array();
    $tabstr= array();
    for($i=0;$i<count($tab);$i++) {
        if(is_numeric($tab[$i])==1) {
           array_push($tabint, $tab[$i]);
        }
        else {
           array_push($tabstr, $tab[$i]);    
        }
    }
    unset($tab);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...