[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись в базу из цикла
Renden
Доброго утра)
Пишу тут пока мозг не взорвался.
Задачка:
Дано строки вида:
"бананов;;10;;;;;мароканских мандаринов;;;5;;;апельсинов;;;;2;зеленых яблок;;15-20;;;;"
"мароканских мандаринов;;60-62;;;;бананов;32;;зеленых яблок;;;12;;;;апельсинов;;20;;"

Таких N колличество и наименования в тексте меняються местами рандомо.
С разделителем мы разобрались тут , все ок, получаем масивчик, но терь надо записать это в базу:
нужно только количество чтоб было в базе так:

id|бананы|апельсины|и тд
1| 10 |2| и тд
2| 32 |20| и тд

Я думаю что сделать это можно с помощью проверки типа:

тут бежит цикл по строкам {
if ($имя == "бананов") {update set бананы='$количество бананов'}
if ($имя == "апельсинов") {update set апельсины='$количество апельсинов'}
и тд
}

Проблема в том что 1 - они в разнобой, 2 - то что мне надо смотреть на имя и в зависимости от него писать количество (а название и колличество в разных переменных).
Я думаю что надо как-то правильно перебирать циклом, а как я даже не представляю. Единственный плюс, это то что порядок строгий 1-наименование 2-количество 3-наименование 4-количество, т.е я думаю мона как-то на четности сыграть.
ps простите за много букавак, пытался подробно обьяснить.



Спустя 1 час, 55 минут, 9 секунд (19.11.2010 - 14:19) Renden написал(а):
отредактировал, ибо никто нифига не понял, кароч вопрос тогда такой:
короче как сделать чтоб в $text был многомерный массив вида?:
[0] -> [бананов] -> [10]
[1] -> [мароканских мандаринов] -> [5]
а не так:

$data = "бананов;;10;;;;;мароканских мандаринов;;;5;;;апельсинов;;;;2;зеленых яблок;;15-20;;;;мароканских мандаринов;;60-62;;;;бананов;32;;зеленых яблок;;;12;;;;апельсинов;;20;;";
$text = preg_split("/[\;]+/", $data);
foreach ($text as $b=>$c) {
echo $b." -> ".$c."<br>";
}

Спустя 3 часа, 49 секунд (19.11.2010 - 17:20) vergin написал(а):
попробуй так, писал по памяти


$data = "бананов;;10;;;;;мароканских мандаринов;;;5;;;апельсинов;;;;2;зеленых яблок;;15-20;;;;мароканских мандаринов;;60-62;;;;бананов;32;;зеленых яблок;;;12;;;;апельсинов;;20;;";
$pattern = "/[а-яА-Я ]+\;*([0-9]+(-[0-9]+)?)/";

preg_match_all($pattern, $data, $tmpArray); //в массиве $tmpArray[0] ложатся строки вида "мароканских мандаринов;;;5"

for($i=0; $i<count($tmpArray[0]); $i++)
{
list($name[$i], $count[$i]) = preg_split("/[\;]+/", $tmpArray[0][$i]); //разбиваем строку по регулярному выражению
}

$text = array_combine($name, $count); //обьеденяем массивы, используя один в качестве ключей, второй - в качестве значений
print_r($text);




Спустя 23 минуты, 5 секунд (19.11.2010 - 17:43) vergin написал(а):
Цитата

[0] -> [бананов] -> [10]
[1] -> [мароканских мандаринов] -> [5]


"бананов", "мароканских мандаринов" является ключами?

Спустя 3 часа, 48 минут, 38 секунд (19.11.2010 - 21:31) Sanchopansa написал(а):
$data = "бананов;;10;;;;;мароканских мандаринов;;;5;;;апельсинов;;;;2;зеленых яблок;;15-20;;;;мароканских мандаринов;;60-62;;;;бананов;32;;зеленых яблок;;;12;;;;апельсинов;;20;;";
$arr = array_filter(explode(';', $data));
$arr = array_values($arr);
$tmparr= array();

for($i = 0; $i < count($arr); $i += 2)
{
$tmparr[][$arr[$i]] = $arr[$i+1];
}
var_dump($tmparr);


Результат
Цитата
array(8) {
  [0]=>
  array(1) {
    ["бананов"]=>
    string(2) "10"
  }
  [1]=>
  array(1) {
    ["мароканских мандаринов"]=>
    string(1) "5"
  }
  [2]=>
  array(1) {
    ["апельсинов"]=>
    string(1) "2"
  }
  [3]=>
  array(1) {
    ["зеленых яблок"]=>
    string(5) "15-20"
  }
  [4]=>
  array(1) {
    ["мароканских мандаринов"]=>
    string(5) "60-62"
  }
  [5]=>
  array(1) {
    ["бананов"]=>
    string(2) "32"
  }
  [6]=>
  array(1) {
    ["зеленых яблок"]=>
    string(2) "12"
  }
  [7]=>
  array(1) {
    ["апельсинов"]=>
    string(2) "20"
  }
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.