【问题标题】:How to add key to json/php arrays如何将密钥添加到 json/php 数组
【发布时间】:2017-05-31 12:09:19
【问题描述】:

我正在使用 PHP & JSON,我需要为 每个 json 数组添加一个键

$array1 = array('id','name1','name2','name3','name4');

我通过 sql-query 得到很多数据:

$array2 = [["1","1","12","34","text1"],["2","1","56","78","text2"]] // json array

我需要为每个 json 数组添加一个键,例如:

[{"id":"1","name1":"1","name2":"1","name3":"1","name4":"test1"},{"id":"2","name1":"2","name2":"2","name3":"2","name4":"test2"}]

【问题讨论】:

  • 使用array_combine

标签: php arrays json


【解决方案1】:

试试这个

array_combine() 函数使用一个“keys”数组和一个“values”数组中的元素创建一个数组。

<?php
$array1 = array('id','name1','name2','name3','name4');

$array2 = [["1","1","12","34","text1"],["2","1","56","78","text2"]];
$result = array();
//echo "<pre>";
foreach ($array2 as $value) {
    $result[] = array_combine($array1,$value);
}
//print_r($result);
echo json_encode($result);
 ?>

注意:这里$array1的数组元素和$value的数组元素必须相同,否则返回FALSE。

【讨论】:

    【解决方案2】:

    您可以使用array_combine() 从另外两个创建一个数组,使用一个作为键,另一个作为值(注意两者必须具有相同的长度!

    $array1 = array('id','name1','name2','name3','name4');
    $array2 = [["1","1","12","34","text1"],["2","1","56","78","text2"]];
    
    foreach ($array2 as &$set) {
        $set = array_combine($array1, $set);
    }
    unset($set);
    
    echo json_encode($array2);
    

    这里我们通过引用将每个内部数组传递给 foreach(&amp;$set 中的 &amp;),因此我们可以直接修改它而无需创建第三个结果数组,我们也在循环之后取消设置它。

    【讨论】:

      【解决方案3】:

      你应该使用array()的定义,即:

      array(
          key  => value,
          key2 => value2,
          key3 => value3,
          ...
          )
      

      您在 array2 的每个元素中都有数据,您可以对其进行迭代,并使用我发布的构造函数为每个元素创建一个新数组。所以,一个例子是:

      array('id'-->array2[i][j],'name1'=>array[i][j+1],...)
      

      【讨论】:

        【解决方案4】:

        您可以使用函数迭代来避免临时全局变量。

        代码:(Demo)

        $keys = ['id', 'name1', 'name2', 'name3', 'name4'];
        
        $rows = [
            ["1", "1", "12", "34", "text1"],
            ["2", "1", "56", "78", "text2"]
        ];
        
        echo json_encode(
                 array_map(
                     function($row) use ($keys) {
                         return array_combine($keys, $row);
                     },
                     $rows
                 )
             );
        

        或者with PHP7.4 and higher享受箭头函数语法:

        echo json_encode(
                 array_map(
                     fn($row) => array_combine($keys, $row),
                     $rows
                 )
             );
        

        但最终,如果此数据来自任何类型的 sql 源,那么您应该在 SELECT 子句中管理列名,然后 php 在您获取数据并将数据推送到结果数组时简单地创建关联子数组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-25
          • 2019-10-22
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 2018-11-07
          • 1970-01-01
          相关资源
          最近更新 更多