2016-07-25 9 views
-1

JSONファイルの値を変更しようとしています。私は'Merchant'キーの項目からドットの後の文字列の部分を削除したいと思います。たとえば、「Amazon.com」は「Amazon」に置き換えてください。ここでJsonをphpで編集して保存します

が私のコードです:ここでは

$file = 'myfile.json'; 
$jsonString = file_get_contents($file); 
$data = json_decode($jsonString, true); 
foreach ($data as $key => $field){ 
    $data[$key]['Merchant'] = (explode(".",$data[$key]['Merchant'])); 
} 
$newJSON = json_encode($data); 
file_put_contents($file, $newJSON); 

は私のJSONファイルである:(。私は後に、すべてを交換したい[ドット])

[ 
    { 
     "0": { 
      "Code": "No Voucher Code",     
      "Merchant": "Amazon.com",    
      "Title": "Upto 70% off on Toys, Kids Apparel and Stationary" 

     }, 
     "1": { 
      "Code": "No Voucher Code", 
      "Merchant": "ebay.com",    
      "Title": "Set of 3 LED Bulbs @ Rs. 99 + Free Shipping"     
     } 

出力:商人値

を保存して置き換えます
[ 
    { 
     "0": { 
      "Code": "No Voucher Code",     
      "Merchant": "Amazon",    
      "Title": "Upto 70% off on Toys, Kids Apparel and Stationary" 

     }, 
     "1": { 
      "Code": "No Voucher Code", 
      "Merchant": "ebay",    
      "Title": "Set of 3 LED Bulbs @ Rs. 99 + Free Shipping"     
     } 

しかし、私のコードは"Merchant"の値を変更していません。何故なの?

+1

? –

答えて

0

あなたのアドレス指定していない外部配列にJSONがあります。 $dataの代わりに、$data[0]をループする必要があります。参照を使用すると、これをより簡単に行うことができます。

foreach ($data[0] as &$field){ 
    $field['Merchant'] = explode(".",$field['Merchant'])[0]; 
} 
unset($field); // unset the reference to avoid weirdness if $field is used later 
1

json_decodestrstr機能(私はデモのための文字列からJSONデータを撮影した)で、次のアプローチを使用します:

ループ内では、バック explodeを使用した後 'Merchant'キーに最初の爆発の要素を割り当てます正確にどのようにこのコードは動作しない
$jsonString = '[ 
    { 
     "0": { 
      "Code": "No Voucher Code",     
      "Merchant": "Amazon.com",    
      "Title": "Upto 70% off on Toys, Kids Apparel and Stationary" 

     }, 
     "1": { 
      "Code": "No Voucher Code", 
      "Merchant": "ebay.com",    
      "Title": "Set of 3 LED Bulbs @ Rs. 99 + Free Shipping"     
     } 
    } 
]'; 

$data = json_decode($jsonString, true); 

foreach ($data[0] as $key => &$v) { 
    $v['Merchant'] = strstr($v['Merchant'], ".", true); 
} 
$newJSON = json_encode($data, JSON_PRETTY_PRINT); 

print_r($newJSON); 

DEMO link

+0

私は、 'strstr'がこれにもっと適していると私は同意します。 –

関連する問題