Массовое изменение полей пользователя
        Здравствуйте!
У нас поменялась политика регистрации пользователей на сайте. Теперь username равен полю phone.
При регистрации все срабатывает верно, но есть несколько тысяч пользователей, зарегистрированных ранее, у которых username стандартный и равен полю email.
Подскажите, можно как-то массово заменить содержимое в username на содержимое из поля phone?
    
    
                                                                                
            У нас поменялась политика регистрации пользователей на сайте. Теперь username равен полю phone.
При регистрации все срабатывает верно, но есть несколько тысяч пользователей, зарегистрированных ранее, у которых username стандартный и равен полю email.
Подскажите, можно как-то массово заменить содержимое в username на содержимое из поля phone?
Комментарии: 12
                Запустите в Console скрипт (естественно, сделав предварительно бэкап базы):
                    foreach ($modx->getIterator('modUser') as $user) {
	$profile = $user->getOne('Profile');
	$user->set('username', $profile->get('phone'));
	$user->save();
}            
                Спасибо, попробую.
Скажите, Вы не знаете, как мне массово тоже из поля phone удалить скобки () и тире — между цифрами?
                    Скажите, Вы не знаете, как мне массово тоже из поля phone удалить скобки () и тире — между цифрами?
                Так только цифры останутся:
 
                    foreach ($modx->getIterator('modUser') as $user) {
    $profile = $user->getOne('Profile');
    $phone = preg_replace("/[^,.0-9]/", '', $profile->get('phone'));
    $user->set('username', $phone);
    $user->save();
}            
                и вот
joxi.ru/1A5qe74uwwPg9A
из поля не убрались лишние
preg_replace("/[^0-9\/+]/"
или
preg_replace("/[^0-9+]/"
может надо?
                    joxi.ru/1A5qe74uwwPg9A
из поля не убрались лишние
preg_replace("/[^0-9\/+]/"
или
preg_replace("/[^0-9+]/"
может надо?
                Не знаю, выражение работает для всех вариантов:
            
                    
            
                Так надо убрать только скобки () и тире — между цифрами
+7 должно остаться
Разве не такое выражение для этого
                    +7 должно остаться
Разве не такое выражение для этого
/[^0-9+]/?            //....
$arr = array('(', ')', '-', '—', '–', ' ');
$phone = str_replace($arr, '', $profile->get('phone'));
//....            <?php
foreach ($modx->getIterator('modUser') as $user) {
    $profile = $user->getOne('Profile');
    $arr = array('(', ')', '-');
    $phone = str_replace($arr, '', $profile->get('phone'));
    $user->save();
}отчет<pre>
SQL time: 0,7248 s
SQL queries: 3780
PHP time: 5,8171 s
Total time: 6,5420 s
Memory: 12 MB
</pre>результат joxi.ru/823NelZCww7KYmничего не изменилось
                Вы не пишете ничего в поле, потому что пропустили:
Полный код:
                    $user->set('username', $phone);Полный код:
foreach ($modx->getIterator('modUser') as $user) {
    $profile = $user->getOne('Profile');
    $arr = array('(', ')', '-');
    $phone = str_replace($arr, '', $profile->get('phone'));
    $user->set('username', $phone);
    $user->save();
}            
                Результат тот же joxi.ru/RmzROJWCVVPaRm
Все остается, как и было.
                    Все остается, как и было.
                Так-то работает
joxi.ru/5mdlpP8CJJ705m
                    joxi.ru/5mdlpP8CJJ705m
<?php
$phones = array(
   '+7(123)456-78-91'
   );
foreach($phones as $phone) {
   echo preg_replace("/[^0-9+]/", '', $phone);
}А так нет<?php
foreach ($modx->getIterator('modUser') as $user) {
    $profile = $user->getOne('Profile');
    $phone = preg_replace("/[^0-9+]/", '', $profile->get('phone'));
    $user->set('username', $phone);
    $user->save();
}            
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.