构建键和值的数组?

时间:2016-03-26 16:22:08

标签: php arrays

我试图用这种结构在php中构建一个json数组:

[{"id":"name last name",
  "id":"name last name",
  "id":"name last name"
}]

其中id键始终是不同的数字,而不仅是id字符串

我试图这样做:

for ($i = 0; $i < count($array); $i++){
    //$namesArray[] = array($array[$i]["id"] =>$array[$i]["name"].
    //               " ".$array[$i]["last"]." ".$array[$i]["name"]);

    $namesArray[] = array_fill_keys(
        $array[$i]["id"],
        $array[$i]["name"]." ".
            $array[$i]["last"]." ".
            $array[$i]["name"]
    );
}

echo json_encode($namesArray);

使用注释的行我会得到这样的结果:

[{"id":"name last name"},
 {"id":"name last name"}
]

但我不想要那个,我希望所有的键和值都在一个数组中。

感谢。

3 个答案:

答案 0 :(得分:1)

保持代码清洁

$array = [];
$array[] = ['id'=>3 , 'name'=>'H', 'last'=>'bensiali' ];
$array[] = ['id'=>4 , 'name'=>'Simon', 'last'=>'Says' ];
$array[] = ['id'=>5 , 'name'=>'Mohammed', 'last'=>'Ali' ];


$val = [];
foreach ($array as $key => $value) {
   $val[$value['id']] = sprintf("%s %s" , $value['name'] , $value['last']); 
}

echo json_encode($val);

输出将是:

{"3":"H bensiali","4":"Simon Says","5":"Mohammed Ali"}

答案 1 :(得分:0)

您可以使用功能方法使用array_reduce填充所需的数组:

$array = [
    ['id' => 1, 'name' => 'name1', 'last' => 'last1'],
    ['id' => 2, 'name' => 'name2', 'last' => 'last2'],
    ['id' => 3, 'name' => 'name3', 'last' => 'last3'],
];


$newArray = array_reduce($array, function($carry, $item) {
    $carry[$item['id']] = $item["name"]." ".
        $item["last"]." ".
        $item["name"];

    return $carry;
});

var_dump($newArray);

输出将是:

array(3) {
  [1]=>
  string(17) "name1 last1 name1"
  [2]=>
  string(17) "name2 last2 name2"
  [3]=>
  string(17) "name3 last3 name3"
}

答案 2 :(得分:0)

以下是如何做到这一点:

// sample data
$array = array(
    array("id" => 1, "name" => "James", "last" => "Last"),
    array("id" => 2, "name" => "Micheal", "last" => "Jackson"),
);

// create empty object (associative array)
$obj = (object) array();

// add key/value pairs to that object
foreach ($array as $row) {
    $obj->$row["id"] = $row["name"] . " " . $row["last"];
}

// wrap object in a single-element array
$result = array($obj);

// output to JSON string
echo json_encode($result, JSON_PRETTY_PRINT);

输出:

[
    {
        "1": "James Last",
        "2": "Micheal Jackson"
    }
]