Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Магические кавычки

Сообщения:  [1-10]   [11-20] 

 
 автор: Trianon   (02.10.2009 в 15:42)   письмо автору
 
   для: cheops   (02.10.2009 в 15:03)
 

>$mixed[$keynew] = $mixed[$key];

Не получится ли тут повторной обработки уже обработанных элементов?
Мне кажется, надежнее будет весь массив заново построить, нежели вбивать элементы в тот, что прямо сейчас раскручивает итератор foreach

      $mixed = array_map('rec_stripslashes', $mixed); 
      $res = array();
      foreach($mixed as $key => $value) 
        $res[stripslashes($key)] = $value; 
      $mixed = res;

  Ответить  
 
 автор: Рома   (02.10.2009 в 15:31)   письмо автору
 
   для: cheops   (02.10.2009 в 15:03)
 

Спасибо, никогда бы не пришло в голову так написать.
<?php
      $mixed 
array_map('rec_stripslashes'$mixed); 
      foreach(
$mixed as $key => $value
      {
      
//
      
}
Думал, что $value в цикле нужно обрабатывать, и никак иначе.

  Ответить  
 
 автор: cheops   (02.10.2009 в 15:03)   письмо автору
 
   для: cheops   (02.10.2009 в 14:59)
 

Почему, можно и объединить, только использовать какой-то такой код
<?php
  
function rec_stripslashes($mixed
  { 
    if(
is_array($mixed)) 
    { 
      
$mixed array_map('rec_stripslashes'$mixed); 
      foreach(
$mixed as $key => $value
      { 
        
$keynew stripslashes($key); 
        if(
$keynew != $key
        { 
          
$mixed[$keynew] = $mixed[$key]; 
          unset(
$mixed[$key]); 
        } 
      }
      return 
$mixed
    } 
    else 
    { 
      return 
stripslashes($mixed); 
    } 
  }
?>

  Ответить  
 
 автор: cheops   (02.10.2009 в 14:59)   письмо автору
 
   для: Рома   (02.10.2009 в 14:37)
 

>return в функции может быть только один?
Нет, почему, может быть и несколько, но срабатывает только один.

  Ответить  
 
 автор: Рома   (02.10.2009 в 14:37)   письмо автору
 
   для: cheops   (02.10.2009 в 14:30)
 

.

  Ответить  
 
 автор: cheops   (02.10.2009 в 14:30)   письмо автору
 
   для: Рома   (02.10.2009 в 14:23)
 

Нет, так как вы уничтожаете сначала элемент массива со старым ключом
unset($mixed[$key]);

а потом присваиваете ему элемент с новым ключом (которого, кстати говоря, ещё и нет).
$mixed[$key] = $mixed[$keynew];

Не понятно, также, какие цели преследует код
   return $mixed[$key]; 
   $value = stripslashes($value); 
   return $mixed[$value];

У вас срабатывает первый return, до второго даже дело не доходит.

PS Элемент, который удаляете при помощи unset() нужно обязательно сохранить. Получать элемент со старым ключом не имеет никакого смысла - старый ключ содержит результаты работы магических кавычек - от этого ключа можно только избавиться. Переименовать его нельзя, так как переименование состоит в том, что вы его уничтожаете и вместо него заводите новый ключ.

  Ответить  
 
 автор: Рома   (02.10.2009 в 14:30)   письмо автору
 
   для: Рома   (02.10.2009 в 14:23)
 

нет, так не работает, я уже сам убедился

  Ответить  
 
 автор: Рома   (02.10.2009 в 14:23)   письмо автору
 
   для: cheops   (02.10.2009 в 14:18)
 

.

  Ответить  
 
 автор: cheops   (02.10.2009 в 14:18)   письмо автору
 
   для: Рома   (02.10.2009 в 14:13)
 

Если кавычек нет - ключ не меняется, если кавычки имеются старый ключ с экранированными кавычками, а этот подход требуется удаления кавычек. Ничего не попишешь. Если выбирается один из подходов - его нужно использовать до конца - иначе посыпятся дыры и ошибки.

  Ответить  
 
 автор: Рома   (02.10.2009 в 14:13)   письмо автору
 
   для: cheops   (02.10.2009 в 12:14)
 

чето мне эта логика не нравиться, она возвращает новый ключ, а если сделать чтоб возвращало старый, вот так?

<?php
  $keynew 
stripslashes($key);
  if(
$keynew != $key)
  {
    unset(
$arr[$key]);
    
$arr[$key] = $arr[$keynew];    
  } 

  Ответить  

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования