【问题标题】:How can I get this array without it printing the name of the 2nd dimension?我怎样才能得到这个数组而不打印第二维的名称?
【发布时间】:2022-11-03 21:48:44
【问题描述】:

我有一个 3d 数组,我正在尝试使用以下方法在有效负载中遍历和打印:

$this->response([
                        "code" => num,
                        "payload" => $arr
                    ]);

但是,目前看起来像这样:

{
    "code": num,
    "payload": [
        {
            "2nd array": [
                {
                    "msg": "some message",
                    "val": "some val"
                }
            ]
        },
        {
            "2nd array": [
                {
                    "msg": "some message",
                    "val": "some val"
                }
            ]
        }
    ]
}

我需要在没有2nd array 值的情况下打印它,如下所示:

{
  "code": num,
  "payload": [
    {
      "msg": "some msg",
      "val": "some val"
    },
    {
      "msg": "some msg",
      "val": "some val"
    }
  ]
}

这是我制作数组的方法:

foreach ($orig_array as $arr) {
                        $res[$i]["2nd array"][] = array(
                            "msg" => $arr["some_message"],
                            "val"       => $arr["some_value"],
                        );
}

有没有一种我没有看到的简单方法来做到这一点?在发送响应之前,我曾尝试将数组展平或循环遍历它,但我无法将它变成那种形状。

编辑:

我想只删除第二个数组,但我不能改变它,因为它不是我的代码,它是遗留的,它会破坏许多其他东西。

【问题讨论】:

  • 那么$res[$i][] = array( "msg" => $arr["some_message"], "val" => $arr["some_value"],); 怎么样。如果你不想要第二个数组,那么不要把它放在那里。
  • @ADyson 我虽然是这样,但我不能改变它,因为它不是我的代码,它是遗留的,它会破坏许多其他的东西。
  • 女巫PHP版本?
  • @Foobar 我使用的是 7.4 版
  • 你说Here's how I make the array,所以我认为这是你的代码:-)

标签: php arrays


【解决方案1】:
#just to get the data from your example, the payload
$args = '[
        {
            "2nd array": [
                {
                    "msg": "some message",
                    "val": "some val"
                }
            ]
        },
        {
            "2nd array": [
                {
                    "msg": "some message",
                    "val": "some val"
                }
            ]
        }
    ]';
$arr = json_decode($args,true);

#that is what you can do in 2 lines
array_walk($arr , fn(&$a) => $a = $a['2nd array'] );
$arr = array_merge(...$arr);

#then use $arr in the response
var_export($arr);

【讨论】:

    【解决方案2】:
    
    $new_arr = [];
    foreach($arr['payload'] as $key => $inside){
        foreach($inside as $n => $val ) {
        $new_arr[] = current($val);
        unset($arr['payload'][$key]);
        }
        
        
    }
    $arr['payload'] = $new_arr;
    print_r($arr);
    

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 2019-06-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      相关资源
      最近更新 更多