2017-01-27 4 views
0

を列挙:文字列の変化と私は文字列を持っている、と私は再配置にあるように値を変更したい、例えば私は、この持っている値のPHP

{ 
"code_2":"CODGD", 
"description_2":"First product", 
"price_2":"45.0", 
"quantity_2":"1", 
"quantityant_2":"1", 
"subtotal_2":"45.0", 
"code_3":"CODRT", 
"description_3":"Second product", 
"price_3":"12.68", 
"quantity_3":"1", 
"quantityant_3":"1", 
"subtotal_3":"12.68", 
"code_7":"CODPO", 
"description_7":"Third product", 
"price_7":"434.0", 
"quantity_7":"1", 
"quantityant_7":"1", 
"subtotal_7":"434.0" 
} 

それは2,3および7のようになりますが、私は必要なの1,2,3 すべてのオブジェクトは6のグループにあります。 code_1、description_1、price_1、quantity_1、quantityant_1、subtotal_1 。私はstr_replaceを使用して考えて少し失われたイム

{ 
"code_1":"CODGD", 
"description_1":"First product", 
"price_1":"45.0", 
"quantity_1":"1", 
"quantityant_1":"1", 
"subtotal_1":"45.0", 
"code_2":"CODRT", 
"description_2":"Second product", 
"price_2":"12.68", 
"quantity_2":"1", 
"quantityant_2":"1", 
"subtotal_2":"12.68", 
"code_3":"CODPO", 
"description_3":"Third product", 
"price_3":"434.0", 
"quantity_3":"1", 
"quantityant_3":"1", 
"subtotal_3":"434.0" 
} 

あなたは私を助けることを願って: は私が必要なのは、このような例_と「renumeratedすることによりsurrondedオブジェクトは、ということです。

おかげ

エキストラ詳細 は、私が実際にこの形式を持つ配列で情報を取得します

+0

あなたのコード –

答えて

2

あなたは以下のようにそれを行うことができます: -

<?php 
$string = '{"code_2":"CODGD", "description_2":"First product", "price_2":"45.0", "quantity_2":"1", "quantityant_2":"1", "subtotal_2":"45.0", "code_3":"CODRT", "description_3":"Second product", "price_3":"12.68", "quantity_3":"1", "quantityant_3":"1", "subtotal_3":"12.68", "code_7":"CODPO", "description_7":"Third product", "price_7":"434.0", "quantity_7":"1", "quantityant_7":"1", "subtotal_7":"434.0"}'; 

echo "<pre/>";print_r($array = json_decode($string,true)); 

$final_array = array(); 
$i = 1; 
for($j = 0;$j<3;$j++){ 
foreach ($array as $key=>$val){ 

    $final_array[explode('_',$key)[0].'_'.$i] = $val; 
} 
    $i++; 
} 

echo "<pre/>";print_r($final_array); 

出力: - https://eval.in/725237

(私の最初の試み自体を見た後に)より良い解決策: -

<?php 
$string = '{"code_2":"CODGD", "description_2":"First product", "price_2":"45.0", "quantity_2":"1", "quantityant_2":"1", "subtotal_2":"45.0", "code_3":"CODRT", "description_3":"Second product", "price_3":"12.68", "quantity_3":"1", "quantityant_3":"1", "subtotal_3":"12.68", "code_7":"CODPO", "description_7":"Third product", "price_7":"434.0", "quantity_7":"1", "quantityant_7":"1", "subtotal_7":"434.0"}'; 

echo "<pre/>";print_r($array = json_decode($string,true)); 
$final_array = array(); 
$i = 1; 
$j = 1; 
foreach ($array as $key=>$val){ 
    if($j ==7){ 
    $i +=1; 
    $j = 1; 
    } 
    $final_array[explode('_',$key)[0].'_'.$i] = $val; 
    $j++; 
} 

echo "<pre/>";print_r($final_array); 

出力: - https://eval.in/725252

+0

こんにちはAnantを共有し、これは動作しますが、値はランダムに生成され、時には彼らは2,3,7以外の時間です1,4,8することができ、彼らは常に同じ – user2312198

+0

ではありません@ user2312198私の現在の答えを確認 –

+0

この方法は素晴らしい、ありがとう助けてくれてありがとう – user2312198

1

あなたの文字列はJSON形式であるため、厄介なことなしにデコードして処理することができます。str_replaceジャグリング。

$json = <<<JSON 
{"code_2":"CODGD", "description_2":"First product", "price_2":"45.0", "quantity_2":"1", "quantityant_2":"1", "subtotal_2":"45.0", "code_3":"CODRT", "description_3":"Second product", "price_3":"12.68", "quantity_3":"1", "quantityant_3":"1", "subtotal_3":"12.68", "code_7":"CODPO", "description_7":"Third product", "price_7":"434.0", "quantity_7":"1", "quantityant_7":"1", "subtotal_7":"434.0"} 
JSON; 

$data = json_decode($json, true); 
$items = array_chunk($data, 6, true); 
$items = array_combine(range(1, count($items)), $items); 
$out = array(); 
foreach ($items as $idx => $item) { 
    foreach ($item as $k => $v) { 
     $k = preg_replace('/^(.+)_\d+$/', '$1_' . $idx, $k); 
     $out[$k] = $v; 
    } 
} 
$json = json_encode($out); 
echo $json;