Многомерный массив и функция разнесения в PHP - PullRequest
0 голосов
/ 10 мая 2019

Мне трудно получить желаемый вывод относительно многомерного массива, пожалуйста, помогите мне с благодарностью

Желаемый вывод:

[
    {
        "sku" : "11111",
        "qty" : "1"
    },
    {
        "sku" : "22222",
        "qty" : "1"
    },
    {
        "sku" : "33333",
        "qty" : "1"
    },
    {
        "sku" : "44444",
        "qty" : "1"
    }
]

Мой код:

$string = "11111*1; 22222*1; 33333*1; 44444*1";

$array  = explode('; ', $string);

foreach($array as $k=>$v){

  $array[$k] = explode('*', $v);

}

Ответы [ 5 ]

1 голос
/ 10 мая 2019

$key не требуется в quickSwap ответ:

    $string = "11111*1; 22222*1; 33333*1; 44444*1";
    $array  = explode('; ', $string);
    foreach ($array as $value) {
        list($sku, $qty) = explode('*', $value);
        $result[] = [
            'sku' => $sku,
            'qty' => $qty
       ];
    }
0 голосов
/ 10 мая 2019

Вы можете использовать array_walk, explode и json_encode с параметром JSON_PRETTY_PRINT

$string = "11111*1; 22222*1; 33333*1; 44444*1";
$strToArray = explode(';',$string);
$res=[];
array_walk($strToArray, function($v, $k) use (&$res){
  $res[$k] = [
    'sku' => substr($v, 0, strpos($v, '*')),
    'qty' => substr($v,strpos($v, '*')+1, strlen($v))
  ];
});
echo json_encode($res,JSON_PRETTY_PRINT);

Live Demo

0 голосов
/ 10 мая 2019

В настоящее время вы выполняете итерацию по объекту правильно, но вам нужно правильно построить массив, содержащий имена ключей:

$string = "11111*1; 22222*1; 33333*1; 44444*1";
$array  = explode('; ', $string);
$new    = [];

foreach($array as $k => $v){
    $parts = explode('*', $v);

    $new[] = [
        'sku' => $parts[0],
        'qty' => $parts[1],
    ];
}

Вот демонстрационная версия

0 голосов
/ 10 мая 2019

Один из вариантов - использовать array_map для цикла по разнесенной строке. Используйте json_encode для преобразования массива в json

$string = "11111*1; 22222*1; 33333*1; 44444*1";

$result = array_map(function($v){
    $t =  explode("*", $v);
    return array( "sku" => trim( $t[0] ), "qty" => trim( $t[1] ));      
}, explode(";", $string));

echo json_encode( $result );

Это приведет к:

[{
  "sku": "11111",
  "qty": "1"
}, {
  "sku": "22222",
  "qty": "1"
}, {
  "sku": "33333",
  "qty": "1"
}, {
  "sku": "44444",
  "qty": "1"
}]
0 голосов
/ 10 мая 2019

Вам просто нужно извлечь эти значения из двух разных переменных и просто присвоить их новой переменной, скажем $result

$string = "11111*1; 22222*1; 33333*1; 44444*1";
$array  = explode('; ', $string);
foreach ($array as $k => $v) {
    list($sku, $qty)   = explode('*', $v);
    $result[$k]['sku'] = $sku;
    $result[$k]['qty'] = $qty;
}
echo json_encode($result);

json_encode - возвращает JSON-представление значения
список - назначить переменные, как если бы они были массивом

выход

[{
    "sku": "11111",
    "qty": "1"
}, {
    "sku": "22222",
    "qty": "1"
}, {
    "sku": "33333",
    "qty": "1"
}, {
    "sku": "44444",
    "qty": "1"
}]

Демо .

EDIT

Вы можете использовать array_combine , чтобы добиться того же.

foreach ($array as $k => $v) {
    $result[$k]   = array_combine(['sku', "qty"],explode('*', $v));
}

Демо

...