将格式化字符串数组转换为数组数组

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

如何将 Postgres 查询中的数组转换为 Laravel 中的数组变量?

我的postgres array structure

我有来自 Laravel 的 var_dump 结果:

0 => array:1 [
    "order_itemset" => "{8,11}"
  ]
1 => array:1 [
"order_itemset" => "{8,12}"
  ]
2 => array:1 [
"order_itemset" => "{17,10}"
  ]
]

如何获取数据并将数据存储到数组变量中?

像这样

$data = [['8', '11'], ['8', '12'], ['17', '10']];
php json laravel postgresql text-parsing
3个回答
2
投票

看这里。

如果您的 postgres 查询返回数组“[8,11]”而不是“某种”JSON“{8,11}”,您可以简化此代码

<?php
$values = array_column($your_data, 'order_itemset');
$values = array_map(function ($v) {
    preg_match("/^\{(.+)\}$/", $v, $matches);
    if ($matches[1]) {
        return explode(',', $matches[1]);
    }
    return null;
}, $values);
print_r($values);

0
投票

你可以使用foreach

$original_array = $your_array;   //Your base array that you showed us on your Question
$base_array = array();

foreach($original_array as $original)
{
    $child_array = array();

    foreach($original->order_itemset as $a)
    {
        $child_array[] = $a;
    }
    $base_array[] = $child_array;
    unset($child_array);
}

die($base_array);

0
投票

您可以迭代行并将字符串值转换为有效的 JSON,然后解析以获取 int 类型值。 演示

var_export(
    array_map(
        fn($row) => json_decode(strtr($row['order_itemset'], '{}', '[]')),
        $array
    )
);

或者,如果您不介意字符串类型值,您可以修剪外部大括号并调用

explode()
演示

var_export(
    array_map(
        fn($row) => explode(',', trim($row['order_itemset'], '{}')),
        $array
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.