Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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_Mysql_Arrays_Json - Fatal编程技术网

Php 将递归数组更改为具有相同键的单个数组

Php 将递归数组更改为具有相同键的单个数组,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我想知道是否可以更改阵列结构,目前我正在接收此阵列: [{"ano":["2004","2006"]},{"ano":["2006",""]},{"ano":["2011",""]},{"ano":["2013",""]}] 我需要把这些日期一行一行地分开,如下所示: [{"ano":"2004"},{"ano":"2006"},{"ano":"2006"},{"ano":"2011"}] while($ano = $pegaAno->fetchObject()){ $ar1

我想知道是否可以更改阵列结构,目前我正在接收此阵列:

[{"ano":["2004","2006"]},{"ano":["2006",""]},{"ano":["2011",""]},{"ano":["2013",""]}]
我需要把这些日期一行一行地分开,如下所示:

[{"ano":"2004"},{"ano":"2006"},{"ano":"2006"},{"ano":"2011"}]
while($ano = $pegaAno->fetchObject()){
    $ar1 = array("ano" => $ano->inicio);
    $ar2 = array("ano" => $ano->fim);
    $result = array_merge_recursive($ar1, $ar2);
    //print_r($result);
    array_push($return_arr,$result);
}
所以,基本上我认为我可以清除空的和重复的值,然后分割数组或其他什么

我使用PHP和MySQL SELECT返回这些值,如下所示:

[{"ano":"2004"},{"ano":"2006"},{"ano":"2006"},{"ano":"2011"}]
while($ano = $pegaAno->fetchObject()){
    $ar1 = array("ano" => $ano->inicio);
    $ar2 = array("ano" => $ano->fim);
    $result = array_merge_recursive($ar1, $ar2);
    //print_r($result);
    array_push($return_arr,$result);
}
需要帮忙吗

while($ano = $pegaAno->fetchObject())
   array_push($return_arr, array("ano" => $ano->inicio), array("ano" => $ano->fim));
$return_arr = array_unique($return_arr);
也许你想要这样的东西?因此,可以将数组设置为

0 => [ "ano" => value ]
1 => [ "ano" => value ]
2 => [ "ano" => value ]
//etc...

您也可以尝试此代码

    $input[0]['anno'] = array("2004","2006");
    $input[1]['anno'] = array("2008","");
    $input[2]['anno'] = array("2002","2006");
    $input[3]['anno'] = array("2004","2013");
    $arr = array();   
    foreach ($input as $value) { 
    foreach ($value as $key =>  $value1) { 
        foreach ($value1 as  $value2) { 
            $arr[] = $value2;
        }   
    } 

    } 
    $resulted = array_filter(array_unique($arr));
    $resulted_array = array();
    foreach ($resulted as $value) { 
        $resulted_array[][$mainkey] = $value;
    }
    print_r($resulted_array);

//RESULT 

Array
(
    [0] => Array
        (
            [anno] => 2004
        )

    [1] => Array
        (
            [anno] => 2006
        )

    [2] => Array
        (
            [anno] => 2008
        )

    [3] => Array
        (
            [anno] => 2002
        )

    [4] => Array
        (
            [anno] => 2013
        )

)

能否从一开始就在所需的结构中创建阵列?或者它必须从顶部显示的数组中更改吗?嗨@zedd,现在我从数据库中请求两列,date\u start和date\u end,所以它是两个数组,我反复合并了它们,但它返回的json与上面的第一个数组一样,我需要用同一个键返回date_start和date_end值并删除重复项,因为我需要显示可用于该查询的日期列表you rock man,这正是我需要的,你知道我如何检查两个数组之间的重复项并删除它们吗?不起作用,可能需要在array_push之前删除重复项吗?@WilliamXavier它实际上对我有效,你能告诉我你是如何尝试的吗?我已经这样尝试过:
array_push(array_unique($return_arr),array(“ano”=>ano->inicio),array(“ano”=>ano->fim))
@WilliamXavier修改了代码,在while之后使用:)但是我有两个数组,我应该在之前合并它们吗?如果数组在同一个数组中,那么首先合并它。