将键添加到当前数组PHP

问题描述 投票:0回答:3

我通过多个输入获得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"} ';

订购目标需要什么?我看过很多阵列,但不幸的是我没有成功。

php arrays json
3个回答
0
投票

您可以尝试在一维数组中执行此操作,然后将其编码为对象。这是一个例子:

$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


0
投票

你可以这样做:

$i = 0;
foreach ($_POST['options'] as $option) { 

     $yok["sik{$i}"] = $option;
     $i++;
}

0
投票

我用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);
}
© www.soinside.com 2019 - 2024. All rights reserved.