#php #arrays
#php #массивы
Вопрос:
Я пытаюсь создать новый массив ($ names) того же размера, что и массив $ years. Я перебираю переменную $ year, но изо всех сил пытаюсь удвоить «Разнесите» переменную $ years_names (сначала через запятую, затем через двоеточие), и не уверен, что это лучший способ. Также из-за этого я не могу использовать search_array. Поскольку в нем может не быть данных за каждый год, я бы хотел, чтобы новый массив содержал нулевое значение в позиции за этот год. Итак, в моей переменной $ years_names мне не хватает данных с 2010 по 2012 год, поэтому индексы 0-1 должны быть нулевыми, а индекс 8 — поскольку данных для этого 2018 года тоже нет. Прилагается более или менее то, что я пытаюсь получить для своего массива $names. Спасибо!
$years = range(2010, 2020);
$data_years = "2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020";
$data_names = "Charlie,Lucy,Linus,Pig Pen,Snoopy,Woodstock,Peppermint Patty,Marcie";
$years_names = "2012:Charlie,2013:Lucy,2014:Linus,2015:Pig Pen,2016:Snoopy,2017:Woodstock,2019:Peppermint Patty,2020:Marcie";
$Exploded = explode(',', $years_names);
$names = [];
foreach($Exploded as $i => $item) {
$names[$i] = explode(':', $item);
//echo "i= {$i}<br/>";
//echo "item= {$item}<br/>";
//echo $names[$i][0] . ':' . $names[$i][1] . "<br/>";
}
Комментарии:
1. Почему ваши данные в этом формате?
2. Данные передаются из вызова API таким образом. Массив $ years и $ names затем используется в графической диаграмме, поэтому мне, к сожалению, нужно работать с тем, как предоставляются данные.
3. Это очень странный формат для использования, вы уверены, что API не может предоставить другой формат?
4. Есть два дополнительных вывода со значениями даты и имени в строковом списке, но у меня все та же проблема с заполнением массива $names .
5. Отредактировал сообщение, чтобы добавить два других значения $data_years и $data_name … к сожалению, это все, что у меня есть.
Ответ №1:
Вы можете сделать что-то вроде этого
$years = range(2010, 2020);
$years_names = "2012:Charlie,2013:Lucy,2014:Linus,2015:Pig Pen,2016:Snoopy,2017:Woodstock,2019:Peppermint Patty,2020:Marcie";
//split `$years_names` at comma
$split_values = explode(',', $years_names);
//convert values to a more usable format
$split_values = array_reduce($split_values, function($return, $item) {
//explode $item (e.g `2012:Charlie`) at the colon symbol
$explode = explode(':', $item);
//separate year from name as key => value
$return[$explode[0]] = $explode[1];
//this return reduces the current iteration of `$split_values` to the key=>value pair
return $return;
});
$names = [];
foreach($years as $year) {
//set default value as null. If year is not found in next loop, this will remain
$names[$year] = null;
//check if year exists in $split_values
if(array_key_exists($year, $split_values)) {
//if it does, set $names[$year] to that value
$names[$year] = $split_values[$year];
}
}
print_r($names);
Вывод
Array
(
[2010] =>
[2011] =>
[2012] => Charlie
[2013] => Lucy
[2014] => Linus
[2015] => Pig Pen
[2016] => Snoopy
[2017] => Woodstock
[2018] =>
[2019] => Peppermint Patty
[2020] => Marcie
)
Комментарии:
1. Спасибо, приятель. Я попробую, но это делает вещи более понятными. Спасибо.