Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 在本例中,如何解决json的数组合并问题?_Php_Arrays_Json_Array Merge - Fatal编程技术网

Php 在本例中,如何解决json的数组合并问题?

Php 在本例中,如何解决json的数组合并问题?,php,arrays,json,array-merge,Php,Arrays,Json,Array Merge,我解析Excel工作表并得到以下JSON: [ { "A":"Samsung", "Groupe":{ "F":"TV", "D":"HDR" } }, { "A":null, "Groupe":{ "F":null, "D":null } }, { "A":"Sony", "Groupe":{

我解析Excel工作表并得到以下JSON:

[
   {
      "A":"Samsung",
      "Groupe":{
         "F":"TV",
         "D":"HDR"
      }
   },
   {
      "A":null,
      "Groupe":{
         "F":null,
         "D":null
      }
   },
   {
      "A":"Sony",
      "Groupe":{
         "F":"T.V",
         "D":"LCD"
      }
   },
   {
      "A":"Sony",
      "Groupe":{
         "F":"PS4",
         "D":"Pro edition"
      }
   },
   {
      "A":"Sony",
      "Groupe":{
         "F":"Smart Phone",
         "D":"Quad core"
      }
   }
]
Php代码:

$data = [];
for ($row = 15; $row <= 25; $row++) {
    $data[] = [
        'A' => $worksheet->getCell('A'.$row)->getValue(),
        'Groupe' => [
            'F' => $worksheet->getCell('F'.$row)->getValue(),
            'D' => $worksheet->getCell('D'.$row)->getValue()
        ]
    ];
} 
编辑: 我从$data1得到的结果与输入JSON完全相同(除了NULL被删除),因此看起来合并数组不起作用,我需要的是:

    [
       {
          "A":"Samsung",
          "Groupe":{
             "F":"TV",
             "D":"HDR"
          }
       },

       {
          "A":"Sony",
          "Groupe": [{
             "F":"T.V",
             "D":"LCD"
          },{
             "F":"PS4",
             "D":"Pro edition"
          }, {"F":"Smart Phone",
             "D":"Quad core"
          }] 
}]   
此外,它还向我展示了:

注意:C:\xampp\htdocs\phptoexcel.php在线中未定义的偏移量:11 43 第43行:
if($data[$j]['A'])!=$data[$j+1]['A']){


使用
A
值作为
$data
中的键,以便您可以按其分组:

$data = [];
for ($row = 15; $row <= 25; $row++) {
    //get A value, skip if A = NULL
    $a = $worksheet->getCell('A'.$row)->getValue(),
    if($a===NULL)continue;

    //get F and D VALUE, skip if one of them = NULL
    $f = $worksheet->getCell('F'.$row)->getValue();
    $d = $worksheet->getCell('D'.$row)->getValue();
    if($f===null || $d===null)continue;

    //test if A is a key in $data. If not, create
    if(!array_key_exist( $a, $data ){
          $data[$a]=[
             'A'=>$a,
             'Groupe'=>[]
             ];
           }

    //Put F and D in a new array in Groupe
    $data[$a]['Groupe'][]=["F"=>$f,"D"=>$d];
} 

使用
A
值作为
$data
中的键,以便您可以按其分组:

$data = [];
for ($row = 15; $row <= 25; $row++) {
    //get A value, skip if A = NULL
    $a = $worksheet->getCell('A'.$row)->getValue(),
    if($a===NULL)continue;

    //get F and D VALUE, skip if one of them = NULL
    $f = $worksheet->getCell('F'.$row)->getValue();
    $d = $worksheet->getCell('D'.$row)->getValue();
    if($f===null || $d===null)continue;

    //test if A is a key in $data. If not, create
    if(!array_key_exist( $a, $data ){
          $data[$a]=[
             'A'=>$a,
             'Groupe'=>[]
             ];
           }

    //Put F and D in a new array in Groupe
    $data[$a]['Groupe'][]=["F"=>$f,"D"=>$d];
} 
试试这个

$arrUnique = array();
$result = array();
$i=0;
foreach($data as $value){
 if($value['A']!=null){
    $data1  = [];
    $intID = $value['A'];
    if( in_array( $intID, $arrUnique ) ) {
        $key = array_search ($intID, $arrUnique);
        $result[$key]['Groupe'][] = $value['Groupe'];

    }else{
        $data1['A'] = $value['A'];
        $data1['Groupe'][] = $value['Groupe'];
        $result[$i]=$data1;
        $arrUnique[]=$value['A'];
        $i++;
    }
}
}试试这个

$arrUnique = array();
$result = array();
$i=0;
foreach($data as $value){
 if($value['A']!=null){
    $data1  = [];
    $intID = $value['A'];
    if( in_array( $intID, $arrUnique ) ) {
        $key = array_search ($intID, $arrUnique);
        $result[$key]['Groupe'][] = $value['Groupe'];

    }else{
        $data1['A'] = $value['A'];
        $data1['Groupe'][] = $value['Groupe'];
        $result[$i]=$data1;
        $arrUnique[]=$value['A'];
        $i++;
    }
}

}

我通常不使用PHP执行JSON到JSON的转换,而是使用实用程序

给定输入的JSON文件,您可以使用以下
jq
过滤器:

jq '[[sort_by(.A)|.[]|select(.A!=null)]|group_by(.A)|.[]as $i|{A:$i[].A,Groupe:$i|map(.Groupe)}]|unique' file
[
  {
    "A": "Samsung",
    "Groupe": [
      {
        "F": "TV",
        "D": "HDR"
      }
    ]
  },
  {
    "A": "Sony",
    "Groupe": [
      {
        "F": "T.V",
        "D": "LCD"
      },
      {
        "F": "PS4",
        "D": "Pro edition"
      },
      {
        "F": "Smart Phone",
        "D": "Quad core"
      }
    ]
  }
]

我通常不使用PHP执行JSON到JSON的转换,而是使用实用程序

给定输入的JSON文件,您可以使用以下
jq
过滤器:

jq '[[sort_by(.A)|.[]|select(.A!=null)]|group_by(.A)|.[]as $i|{A:$i[].A,Groupe:$i|map(.Groupe)}]|unique' file
[
  {
    "A": "Samsung",
    "Groupe": [
      {
        "F": "TV",
        "D": "HDR"
      }
    ]
  },
  {
    "A": "Sony",
    "Groupe": [
      {
        "F": "T.V",
        "D": "LCD"
      },
      {
        "F": "PS4",
        "D": "Pro edition"
      },
      {
        "F": "Smart Phone",
        "D": "Quad core"
      }
    ]
  }
]

请告诉我们预期的结果和你目前得到的结果。你好,约斯拉。您可以尝试使用这个@SuhasBachhav——OP使用的是PHP。您发布的链接是针对Javascript的(在问题中没有标记)。您将在
Groupe
中得到重复的键,而您不能拥有这些键。什么是可接受的结果?@MagnusEriksson好的,对这一混乱表示歉意。请向我们展示预期结果和您当前得到的结果。你好,Yosra。您可以尝试使用这个@SuhasBachhav——OP使用的是PHP。您发布的链接是针对Javascript的(在问题中没有标记)。您将在
Groupe
中得到重复的键,而您不能拥有这些键。什么是可以接受的结果?@MagnusEriksson好的,我为这一混乱道歉。