Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于分解数组创建新数组_Php_Arrays - Fatal编程技术网

Php 基于分解数组创建新数组

Php 基于分解数组创建新数组,php,arrays,Php,Arrays,我正在尝试创建一个与$years数组大小相同的新数组($names)。我正在循环使用$year变量,但很难将$years\u names变量(首先是逗号,然后是冒号)加倍“爆炸”,我不确定这是最好的方法。也正因为如此,我无法使用搜索数组。由于它可能没有每年的数据,我希望新数组在该年的位置上保留一个空值。所以在我的$years_names变量中,我缺少从2010年到2012年的数据,所以索引0-1应该为空,索引8也应该为空,因为2018年也没有数据。附件或多或少是我试图为$names数组获取的内容

我正在尝试创建一个与$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
)