За последние 24 часа нас посетили 22989 программистов и 1721 робот. Сейчас ищет 1871 программист ...

перебор массива

Тема в разделе "Сделайте за меня", создана пользователем odlf3, 24 сен 2014.

  1. odlf3

    odlf3 Новичок

    С нами с:
    24 сен 2014
    Сообщения:
    4
    Симпатии:
    0
    Подскажите пожалуйста можно ли и каким образом перебрать массив:
    Код (Text):
    1. Array (
    2.    [0] => Array (
    3.       [name] => title_1
    4.       [value] => Автосалон BMW
    5.    )
    6.    [1] => Array (
    7.       [name] => car_1
    8.       [value] => x6
    9.    )
    10.    [2] => Array (
    11.       [name] => title_2
    12.       [value] => Автосалон opel
    13.    )
    14.    [3] => Array (
    15.       [name] => car_2
    16.       [value] => astra
    17.    )
    18. )
    чтоб получилось:
    Код (Text):
    1. Array (
    2.    [0] => Array (
    3.       [id] => 1
    4.       [title] => Автосалон BMW
    5.       [car] => x6
    6.    )
    7.    [1] => Array (
    8.       [id] => 2
    9.       [title] => Автосалон opel
    10.       [car] => astra
    11.    )
    12. )
     
  2. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Очень костыльно будет. А "Здесь может быть любой разделитель" означает, что вы сами можете выбрать, какой он будет, или может в исходных данных приходить по-разному?
     
  3. odlf3

    odlf3 Новичок

    С нами с:
    24 сен 2014
    Сообщения:
    4
    Симпатии:
    0
    сам могу поменять, у меня этот массив приходит с ajax с таблицы по функции $('form#sale').serializeArray();
    name и value - это значение тегов из input и вот такой дрянной массив приходит, мне бы его подправить чтоб в sql записать. Голову сломал как массив более адекватным под эти нужды сделать...
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Пока не найдёте более подходящее решение, можете использовать такое:
    Код (PHP):
    1. $newArr = array();
    2. function findVal($car, $arr){
    3.     foreach($arr as $v){
    4.         if($v['name'] == $car){
    5.             return $v['value'];
    6.         }
    7.     }
    8.     return false;
    9. }
    10. foreach($arr as $k => $v){
    11.     if(preg_match('/title.+(\d+)/',$v['name'], $m)){
    12.         $ktmp = preg_replace('/title/', 'car', $v['name'], -1, $cnt);
    13.         if($cnt) $car = findVal($ktmp, $arr);
    14.         $newArr[] = array('id'=>$m[1], 'title' => $v['value'], 'car'=>$car);
    15.     }
    16. }
    17. print_r($newArr);
     
  5. odlf3

    odlf3 Новичок

    С нами с:
    24 сен 2014
    Сообщения:
    4
    Симпатии:
    0
    Сделал так:
    Код (Text):
    1.  
    2. for ($i = 0; $i < count($array); $i++) {
    3.     foreach ($array[$i] as $key=>$value) {
    4.        
    5.         if($key == 'name') {
    6.             $new = explode("_", $value);
    7.             $array[$i]['id'] = $new[1];
    8.             unset($array[$i][$key]);
    9.         }else if($key == 'value'){
    10.             $array[$i][$new[0]] = $value;
    11.             unset($array[$i][$key]);
    12.         }
    13.     }
    14. }
    Но осталось объединить массивы, пока выходит так:
    Код (Text):
    1.  
    2. Array
    3. (
    4.     [0] => Array
    5.         (
    6.             [id] => 1
    7.             [title] => Автосалон BMW
    8.         )
    9.  
    10.     [1] => Array
    11.         (
    12.             [id] => 1
    13.             [car] => x6
    14.         )
    15.  
    16.     [2] => Array
    17.         (
    18.             [id] => 2
    19.             [title] => Автосалон opel
    20.         )
    21.     [3] => Array
    22.         (
    23.             [id] => 2
    24.             [car] => astra
    25.         )
    Добавлено спустя 6 минут 59 секунд:
    Думаю что можно это осуществить не через перебор, а через функцию...
     
  6. odlf3

    odlf3 Новичок

    С нами с:
    24 сен 2014
    Сообщения:
    4
    Симпатии:
    0
    Код (Text):
    1. $result = array();
    2. foreach($array as $items) {
    3.     if(isset($result[$items['id']])) {
    4.         $result[$items['id']] += $items;
    5.     } else {
    6.         $result[$items['id']] = $items;
    7.     }
    8. }
    9. $result = array_values($result);
    10. print_r($result);