Php 基于分解数组创建新数组
我正在尝试创建一个与$years数组大小相同的新数组($names)。我正在循环使用$year变量,但很难将$years\u names变量(首先是逗号,然后是冒号)加倍“爆炸”,我不确定这是最好的方法。也正因为如此,我无法使用搜索数组。由于它可能没有每年的数据,我希望新数组在该年的位置上保留一个空值。所以在我的$years_names变量中,我缺少从2010年到2012年的数据,所以索引0-1应该为空,索引8也应该为空,因为2018年也没有数据。附件或多或少是我试图为$names数组获取的内容。谢谢Php 基于分解数组创建新数组,php,arrays,Php,Arrays,我正在尝试创建一个与$years数组大小相同的新数组($names)。我正在循环使用$year变量,但很难将$years\u names变量(首先是逗号,然后是冒号)加倍“爆炸”,我不确定这是最好的方法。也正因为如此,我无法使用搜索数组。由于它可能没有每年的数据,我希望新数组在该年的位置上保留一个空值。所以在我的$years_names变量中,我缺少从2010年到2012年的数据,所以索引0-1应该为空,索引8也应该为空,因为2018年也没有数据。附件或多或少是我试图为$names数组获取的内容
$years=范围(2010年、2020年);
$data_years=“2010201120120132001520162017201820192020”;
$data\u NAME=“查理、露西、莱纳斯、猪圈、史努比、伍德斯托克、薄荷馅饼、玛西”;
$years\u names=“2012:Charlie,2013:Lucy,2014:Linus,2015:Pig Pen,2016:Snoopy,2017:Woodstock,2019:Peppermint Patty,2020:Marcie”;
$spolded=分解(“,”,$years\u name);
$names=[];
foreach($分解为$i=>$item){
$names[$i]=分解(“:”,$item);
//回声“i={$i}
”;
//echo“item={$item}
”;
//echo$names[$i][0]。:'.$names[$i][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
)
为什么数据采用这种格式?数据是通过API调用以这种方式提供的。$years和$names数组随后在图形图表中使用,因此不幸的是,我需要处理数据的提供方式。这是一种非常奇怪的格式,您确定API不能提供不同的格式吗?在字符串列表中有两个额外的输出,带有日期和名称值,但我仍然有同样的问题,必须填充$names数组。编辑帖子以添加另外两个值$data\u years和$data\u name…不幸的是,这就是我的全部。谢谢伙计。我会试一试,但这会让事情看起来更清楚。非常感谢。
Array
(
[2010] =>
[2011] =>
[2012] => Charlie
[2013] => Lucy
[2014] => Linus
[2015] => Pig Pen
[2016] => Snoopy
[2017] => Woodstock
[2018] =>
[2019] => Peppermint Patty
[2020] => Marcie
)