Подскажите пожалуйста можно ли и каким образом перебрать массив: Код (Text): Array ( [0] => Array ( [name] => title_1 [value] => Автосалон BMW ) [1] => Array ( [name] => car_1 [value] => x6 ) [2] => Array ( [name] => title_2 [value] => Автосалон opel ) [3] => Array ( [name] => car_2 [value] => astra ) ) чтоб получилось: Код (Text): Array ( [0] => Array ( [id] => 1 [title] => Автосалон BMW [car] => x6 ) [1] => Array ( [id] => 2 [title] => Автосалон opel [car] => astra ) )
Очень костыльно будет. А "Здесь может быть любой разделитель" означает, что вы сами можете выбрать, какой он будет, или может в исходных данных приходить по-разному?
сам могу поменять, у меня этот массив приходит с ajax с таблицы по функции $('form#sale').serializeArray(); name и value - это значение тегов из input и вот такой дрянной массив приходит, мне бы его подправить чтоб в sql записать. Голову сломал как массив более адекватным под эти нужды сделать...
Пока не найдёте более подходящее решение, можете использовать такое: Код (PHP): $newArr = array(); function findVal($car, $arr){ foreach($arr as $v){ if($v['name'] == $car){ return $v['value']; } } return false; } foreach($arr as $k => $v){ if(preg_match('/title.+(\d+)/',$v['name'], $m)){ $ktmp = preg_replace('/title/', 'car', $v['name'], -1, $cnt); if($cnt) $car = findVal($ktmp, $arr); $newArr[] = array('id'=>$m[1], 'title' => $v['value'], 'car'=>$car); } } print_r($newArr);
Сделал так: Код (Text): for ($i = 0; $i < count($array); $i++) { foreach ($array[$i] as $key=>$value) { if($key == 'name') { $new = explode("_", $value); $array[$i]['id'] = $new[1]; unset($array[$i][$key]); }else if($key == 'value'){ $array[$i][$new[0]] = $value; unset($array[$i][$key]); } } } Но осталось объединить массивы, пока выходит так: Код (Text): Array ( [0] => Array ( [id] => 1 [title] => Автосалон BMW ) [1] => Array ( [id] => 1 [car] => x6 ) [2] => Array ( [id] => 2 [title] => Автосалон opel ) [3] => Array ( [id] => 2 [car] => astra ) Добавлено спустя 6 минут 59 секунд: Думаю что можно это осуществить не через перебор, а через функцию...
Код (Text): $result = array(); foreach($array as $items) { if(isset($result[$items['id']])) { $result[$items['id']] += $items; } else { $result[$items['id']] = $items; } } $result = array_values($result); print_r($result);