Пишу тут пока мозг не взорвался.
Задачка:
Дано строки вида:
"бананов;;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]
а не так:
короче как сделать чтоб в $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" } } |