我通过多个输入获得POST。
<input name="options[]" type="text"/>
<input name="options[]" type="text"/>
<input name="options[]" type="text"/>
PHP:
$i = 0;
foreach ($_POST['options'] as $option) {
$yok[] = array('sik'. $i++ => $option);
}
$result = json_encode($yok);
// $result : ' [{"sik0":"op1"},{"sik1":"op2"},{"sik2":"op3"},{"sik3":"op4"}] ';
My Goal:
// $result : ' {"sik0":"op1", "sik1":"op2", "sik2":"op3", "sik3":"op4"} ';
订购目标需要什么?我看过很多阵列,但不幸的是我没有成功。
您可以尝试在一维数组中执行此操作,然后将其编码为对象。这是一个例子:
$i = 0;
$yok = [];
foreach ($_POST['options'] as $option) {
$yok['sik'.$i++] = $option;
}
echo json_encode($yok, JSON_FORCE_OBJECT);
这样您就可以创建一维中间数组,例如:
[
'sik0' => 5,
'sik1' => 6
];
然后强制将其编码为JSON对象。只有当数组是非关联的时,才需要标志JSON_FORCE_OBJECT
。
你可以这样做:
$i = 0;
foreach ($_POST['options'] as $option) {
$yok["sik{$i}"] = $option;
$i++;
}
我用phpunit编写了一个小测试来给出答案和一些重构:
<?php
class AddKeyTest extends PHPUnit\Framework\TestCase
{
public function setUp() : void
{
$this->sampleOptions = [];
$this->sampleOptions[] = "op1";
$this->sampleOptions[] = "op2";
$this->sampleOptions[] = "op3";
$this->sampleOptions[] = "op4";
}
public function testReachGoalWithSuccess()
{
$case = new AddKey();
$result = $case->run($this->sampleOptions);
$expect = '{"sik0":"op1","sik1":"op2","sik2":"op3","sik3":"op4"}';
$this->assertEquals($expect, $result);
}
}
此课程的考试是绿色的:
<?php
class AddKey
{
private $yok = [];
public function run(array $options) : string
{
foreach ($options as $option) {
$this->yok['sik'. count($this->yok)] = $option;
}
return json_encode($this->yok);
}
}
一个类不是强制性的。所以,......这里有一个功能:
function reachGoal($options)
{
$result = [];
foreach ($options as $option) {
$result['sik'. count($result)] = $option;
}
return json_encode($result);
}