За последние 24 часа нас посетили 54054 программиста и 1779 роботов. Сейчас ищут 859 программистов ...

Ассоциативный массив из строки

Тема в разделе "PHP для новичков", создана пользователем F1do, 21 июн 2008.

  1. F1do

    F1do Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Приветствую! Тяжеловато мне даётся PHP.. :lol:

    Подскажите код, чтоб из строки сделать ассоциативный массив

    Код (Text):
    1. $string = "i1:1|i2:2|i3:3";
    нужно:

    Код (Text):
    1. $string2 = array ("i1" => "1",
    2.                   "i2" => "2",
    3.                   "i3" => "3");
    заранее спасибо ) :roll:
     
  2. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Смотри функцию explode()
     
  3. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    а строка откуда берется? м.б. ее можно привести к формату, в котором ассоциированные массивы преобразовывает ф-ция serialize ?
     
  4. NOmeR1

    NOmeR1 Активный пользователь

    С нами с:
    11 май 2008
    Сообщения:
    97
    Симпатии:
    0
    Код (Text):
    1. <?php
    2.     $string = 'i1:1|i2:2|i3:3';
    3.     $array1 = array();
    4.     $array2 = explode('|', $string);
    5.     foreach($array2 as $str) {
    6.         list($key, $value) = explode(':', $str);
    7.         $array1[$key] = $value;
    8.     }
    9.     echo('<pre>');
    10.     print_r($array1);
    11.     echo('</pre>');
    12. ?>
    Вывод
    Код (Text):
    1. Array
    2. (
    3.     [i1] => 1
    4.     [i2] => 2
    5.     [i3] => 3
    6. )
     
  5. F1do

    F1do Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    DarkElf
    плохо разобрался в этой функции.. (

    NOmeR1
    огромное спасибо! )))
     
  6. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    F1do

    передай ей асс.массив и посмотри ее вывод
     
  7. F1do

    F1do Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    DarkElf
    нипанятно.. ((


    :)
     
  8. F1do

    F1do Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    Новая проблема )))

    Теперь есть строка

    PHP:
    1. $str2 = i2:2
    как проверить старую строку на наличие элемента i2, и, если он есть, увеличить соседнее значение i2:x

    проще говоря, на входе есть

    PHP:
    1. $string = "i1:1|i2:2|i3:3";
    2. $str2 = i2:2
    а на выходе должно быть

    PHP:
    1. $string = "i1:1|i2:[b]4[/b]|i3:3";
    я заступорился на моменте деления строки уже по :
     
  9. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    ИМХО програмирование - это не твое...
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    S.t.A.M.
    Все норм, чел просто еще функции не выучил :)

    F1do
    Вот тебе учебный (максимально подробный) пример, разбирайся:
    PHP:
    1. <?php
    2. $string = "i1:1|i2:2|i3:3";
    3. if(substr_count($string,'i2')) //Если в строке есть i2
    4. {
    5.     $position = strpos($string,'i2'); //Находим положение i2
    6.     $position_n = $position+3; //Значение i2 будет на 3 символа дальше
    7.     $value=substr($string,$position_n,1); //Получаем значение i2
    8.     $value++; //Увеличиваем значение
    9.     $string=substr_replace($string,$value,$position_n,1); //Заменяем старое значение на новое
    10. }
    11. echo $string;
     
  11. F1do

    F1do Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    41
    Симпатии:
    0
    S.t.A.M.
    жжошь.. ))

    [vs]
    спасибо, буду курить )

    UPD

    ага, сразу заметно, что если там больше 1 цифры, то будет неправильно ) видимо, всё-таки массивы )

    UPD 2
    уже пробовал и strtok ();, чтоб получать след. элемент через next (); ))

    UPD 3
    ааа как всё просто-то ))))

    PHP:
    1.  
    2. <?
    3. $old_inv_arr = array ();
    4. $old_inv_arr2 = explode('|', $old_inv);
    5. foreach($old_inv_arr2 as $str) {
    6.     list($item, $value) = explode(':', $str);
    7.     $old_inv_arr[$item] = $value;
    8.     if ($item == $itemid) { $in_inv = 1; $nums = $value; } // value это оно и есть, теперь только нужно записать это обратно в строку )
    9. }
    10.