Объясняю более доступно вопрос: Например существует массив: $user_numb = array("111111","222222","333333","444444","555555","666666","777777","...и т.д..."); и еще один массив, состоящий из некоторых элементов 1го массива: $del_user_numb = array("222222","555555","666666","..и т.д.."); Короче на выходе из массива $user_numb = array("111111","222222","333333","444444","555555","666666","777777","...и т.д..."); должен получиться массив $user_numb = array("111111","333333","444444","777777","...и т.д..."); Вопрос: Как из массива $user_numb удалить элементы, которые встречаются в $del_user_numb ? Сам я пытался создать скрипт удаления, но удаляет почему-то только 1 элемент, а не все :cry: Вот: ________________________ while (list ($key, $val) = each ($del_user_numb) ): $del_user_key = array_keys($user_numb, "$val"); // ключ удаляемого элемента = ключу элемента из массива -$user_numb, $val = элемент массива $del_user_numb; foreach ($del_user_key as $item) { unset($user_numb[$item]); } // удаление элемента из массива $user_numb, ключем которого является ключ, который выявлен при совпадении элемента из $del_user_numb и $user_numb... endwhile; // комменты к коду не очень понятны, объясню на словах: - Происходит цикл: перебор элементов $del_user_numb... - затем ищется ключ первого элемента из массива $user_numb, при этом имя этого элемента задается первым элементом массива $del_user_numb... короче ищют ключ в массиве $user_numb, но при этом значение берется из массива $del_user_numb. (должно соблюдаться условие что значения массива $del_user_numb должны присутствовать в массиве $user_numb, но по ходу программы массив $del_user_numb будет содержать только значения из массива $user_numb) - в итоге мы получили ключ элемента массива $user_numb который надо удалить из $user_numb. - удаление элемента массива $user_numb, который имеет ключ $del_user_key. (это происходит через функцию переюора foreach, т.к. ключ удаляемого элемента в следующем цикле меняется. - происходит следующий цикл поиска ключа, сравнивания удаления, но уже для следующего элемента. но происходит так что при первом цикле удаляется всё как надо, но когда происходит второй, третий, цикл, то удаленные элементы предыдущих циклов возвращаются в массив, и выходит, что удаляется только последний элемент. ____________________ Если ипользовать такое удаление, то удаляется из массива $user_numb только элемент массива $del_user_numb "666666", то есть последний элемент этого массива, а все предыдущие ("222222","555555") остаются нетронутыми. Скорее всего я делаю удаление элементов через ж... но я пока новичек. может кто подскажет более адекватный метод или покажет в чем состоит ошибка моего метода.
Luge спасибо большое за помощь... но опять проблемма: если рассматрривать аррэй_дифф на абстрактном примере, то эта функция просто идеальна, но как только подставляю свои массивы то результат 1 в 1 как и после моего скрипта... в чем проблема не пойму: $copy_arr_users # после преобразований # = array("473295721","462353820","415881528","431869210"); // ключи тут не написаны, но они разные; $arr_of_stoped_users = array("462353820","415881528","431869210") // тоже ключики/значения не постоянные; $del_copy_arr_users = array_diff ($copy_arr_users, $arr_of_stoped_users); // $del_copy_arr_users - массив уже с удаленными юзерами; Если ответы вывести в браузер, то вот что пишет: Массив $copy_arr_users: //основной массив (из него удаляются элементы) Array ( [0] => 473295721 [1] => 462353820 [2] => 415881528 [3] => 431869210 ) Массив $arr_of_stoped_users: // массив в котором находятся элементы для удаления Array ( [0] => 462353820 [1] => 415881528 [2] => 431869210 ) _________________________________ Array ( [0] => 473295721 [1] => 462353820 [2] => 415881528 ) // результат после аррей_дифф как видно, результат точь в точь как и раньше... Может дело в том что все массивы непостоянны и до их образования проходит множество этапов. или дело в ключах, хотя аррей_дифф не реагирует на ключи... Или настройки пхп или деневера надо изменить... Luge, если не трудно помоги... :cry:
во-первых во вторых PHP: <?php $copy_arr_users = array("473295721","462353820","415881528","431869210"); $arr_of_stoped_users = array("462353820","415881528","431869210"); $del_copy_arr_users = array_diff ($copy_arr_users, $arr_of_stoped_users); echo '$copy_arr_users<pre>'.print_r($copy_arr_users,1).'</pre> $arr_of_stoped_users<pre>'.print_r($arr_of_stoped_users,1).'</pre> $del_copy_arr_users<pre>'.print_r($del_copy_arr_users,1).'</pre>'; ?> Код (Text): $copy_arr_users Array ( [0] => 473295721 [1] => 462353820 [2] => 415881528 [3] => 431869210 ) $arr_of_stoped_users Array ( [0] => 462353820 [1] => 415881528 [2] => 431869210 ) $del_copy_arr_users Array ( [0] => 473295721 ) что-то у тебя в коде не так.
Да... что то не так, я даже нашел что, но исправить мне пхп не дает :evil: . Вот фрагмент моего кода: $arr_of_stoped_users = file( "stoped_users.txt" ); $copy_arr_users = array("473295721","462353820","415881528"431869210"); $del_copy_arr_users = array_diff ($copy_arr_users, $arr_of_stoped_users); Так вот массив $arr_of_stoped_users даже не поддается копированию :!: : $arr_of_stoped_users = $c; // эта запись выдает ошибку... :x Текстовик "stoped_users.txt" содержит текст: 462353820 415881528 431869210 В чем проблема?
в файле в конце каждой строки есть символы новой стпроки. Для винды \r\n, для никсов \n, для маков \r прочитанная из файла «462353820\r\n» и содержщаяся во втором массиве «462353820» строки разные.
:shock: фига се... я думал пхп эт дело сам распознает и сделает как надо. Я вообще не представляю как это дело убрать?? Подскажишш функцию для этого?
Блин и снова проблема((( Как мог потыркал эту функцию в разные места,.. Не работает. Можешь написать код с исправлением символов форматирования или объяснить каким обазом применить функцию к массиву?
тупо в лоб PHP: <?php $copy_arr_users = explode("\r\n",file_get_contents('stoped_users.txt')); $arr_of_stoped_users = array("462353820","415881528","431869210"); $del_copy_arr_users = array_diff ($copy_arr_users, $arr_of_stoped_users); echo '$copy_arr_users<pre>'.print_r($copy_arr_users,1).'</pre> $arr_of_stoped_users<pre>'.print_r($arr_of_stoped_users,1).'</pre> $del_copy_arr_users<pre>'.print_r($del_copy_arr_users,1).'</pre>'; ?>
ну ты выручил!!! Огромное спасибо... ПХП сила))) есть конеш еще множество вопросов, но я лучше сам... :idea: не буду отвлекать)))