Всем привет, знаю что при изменении массива может поменяться порядок элементов в нем, но как победить? Суть в следующем, я беру исходный массив, прогоняю его в foreach, проверяю в нем наличие элементов, и если их нет - добавляю. Выглядит так: PHP: <?php // Исходный массив foreach ($dealers as $key => $article){ $data[$key]['title'] = $article[0]->art_title; foreach ($article as $art){ if($art->field_id == 1){ $data[$key]['region'] = $art->value; } if($art->field_id == 2){ $data[$key]['city'] = $art->value; } if($art->field_id == 3){ $data[$key]['phone'] = $art->value; } if($art->field_id == 4){ $data[$key]['metro'] = $art->value; } } } // Добавляю элементы foreach($data as $key => $val){ if(empty($data[$key]['region'])){ $data[$key]['region'] = 'Не указано'; } if(empty($data[$key]['city'])){ $data[$key]['city'] = 'Не указано'; } if(empty($data[$key]['phone'])){ $data[$key]['phone'] = 'Не указано'; } if(empty($data[$key]['metro'])){ $data[$key]['metro'] = 'Не указано'; } } При любом изменении элемента (на null, '', 'Не указано') добавленные элементы уходят в конец массива, а порядок очень важен. Из этого массива генериться excel файл Подскажите, в каком направлении копать? Буду очень признателен за примеры с кодом. Заранее спасибо!
что мешает задавать значения по условию в момент заполнения массива? PHP: $data[$key]['region'] = empty($art->value) ? 'Не задано' : $art->value;;
@Volonter, PHP: $data[$key]['region'] = $art->value ?: 'Не указано'; @MouseZver, наверное, потому что он точно знает, что элементы в его массиве - объекты с публичными свойствами.
Попробуйте в новый массив вставлять массив уже заполненный значениями по умолчанию Как-то так Код (Text): <pre> <?php $array = array(0 => array('key1' => 'one', 'key2' => 'two', 'key9' => 'nine', 'key5' => 'five'), 2 => array('key1' => 'one', 'key2' => 'two', 'key9' => 'nine', 'key5' => 'five'), 5 => array('key1' => 'one', 'key2' => 'two', 'key9' => 'nine', 'key5' => 'five')); $new_array = array(); $new_row = array('key1' => 'default', 'key2' => 'default', 'key3' => 'default', 'key4' => 'default', 'key5' => 'default', 'key6' => 'default', 'key7' => 'default'); foreach($array as $key => $row) { $new_array[$key] = $new_row; foreach($new_row as $k => $v) { if(isset($row[$k])) { $new_array[$key][$k] = $row[$k]; } } } print_r($new_array); ?>
как вариант, можно произвести нужные манипуляции, а затем пересортировать массив через одну из сортировочных функций. если нужен порядок по ключу, то https://www.php.net/ksort https://www.php.net/krsort