2016-11-07 2 views
-1

私はかなりPHP、JSONなどに新しいです。 HTML5フォームをJSONデータベースに入力し、その情報を呼び出すという課題があります。end()は、パラメータ1が配列であることを予期しています。

<?php 
$f_name  = $_POST['f_name']; 
$l_name  = $_POST['l_name']; 
$u_email = $_POST['u_email']; 
$u_adress = $_POST['u_adress']; 
$u_postcode = $_POST['u_postcode']; 
$u_place = $_POST['u_place']; 
$u_birth = $_POST['u_birth']; 

$file = file_get_contents("data.json"); 
$data = json_decode('data.json', true); 

$last_item = end($data); 
$last_item_id = $last_item['id']; 



$data[] = array(

    'f_name'=>$f_name, 
    'l_name'=>$l_name, 
    'u_email'=>$u_email, 
    'u_adress' =>$u_adress, 
    'u_postcode' =>$u_postcode, 
    'u_place'=>$u_place, 
    'u_birth'=>$u_birth, 
    'id' =>++$last_item_id 
    ); 


file_put_contents('data.json', json_encode($data)); 
?> 

とこれがそうIDが自動インクリメントする必要がありますが、私はこのエラーを取得することをしようとすると、出力

[{"f_name":"Jack","l_name":"Smith","u_email":"[email protected]","u_adress":"Something 1","u_postcode":"1111 AA","u_place":"SomeCity","u_birth":"jjjj-mm-dd","id":1}] 

です:この部分

を指し

end() expects parameter 1 to be array, null given 

$last_item = end($data); 
$last_item_id = $last_item['id']; 
+6

タイプミス 'json_decode(真$ファイルを、)支援を期待;' – cske

+0

チェック '$のdata'は' IS_ARRAY($データ) ' –

+0

どうやら' json_decode() ''失敗し、返しを使って配列の場合偽です。 – arkascha

答えて

0

は、この行を置き換えます

$data = json_decode('data.json', true); 

と:

$data = json_decode($file, true); 

n idを再度抽出してください。削除:

$last_item_id = $last_item['id']; 

使用LAST_ITEM後:あなたはあなたが実際にあなたが$data[] = array(....) を使用する場合は、それを維持したい場合は、それは、2D作る正しいJSONの1次元配列のデータを保存されていないことに注意してください

$data = array(

    'f_name'=>$f_name, 
    'l_name'=>$l_name, 
    'u_email'=>$u_email, 
    'u_adress' =>$u_adress, 
    'u_postcode' =>$u_postcode, 
    'u_place'=>$u_place, 
    'u_birth'=>$u_birth, 
    'id' =>++$last_item 
    ); 

その後、交換してください:

$last_item = end($data); 

で:

$last_item = end($data[0]); 

かいつまんで、作業のコードのいずれかを指定できます

$data = json_decode($file, true); 
$last_item = end($data[0]); 
$data[] = array(

     'f_name'=>$f_name, 
     'l_name'=>$l_name, 
     'u_email'=>$u_email, 
     'u_adress' =>$u_adress, 
     'u_postcode' =>$u_postcode, 
     'u_place'=>$u_place, 
     'u_birth'=>$u_birth, 
     'id' =>++$last_item 
     ); 

OR

$data = json_decode($file, true); 
$last_item = end($data); 
$data = array(

     'f_name'=>$f_name, 
     'l_name'=>$l_name, 
     'u_email'=>$u_email, 
     'u_adress' =>$u_adress, 
     'u_postcode' =>$u_postcode, 
     'u_place'=>$u_place, 
     'u_birth'=>$u_birth, 
     'id' =>++$last_item 
     ); 

したいかによって決まります。 私はそれが

+0

最後の部分が間違っています。 jsonのデータ構造を見ると、それはオブジェクトの配列です。 – jeroen

+0

jeroenは良い点を作っています。私は自分の答えを編集しました。ファイナライズデータをファイルに保存するには、$ data []以外の$ dataを使用する必要があります。現在、json 1D配列をファイルに保存していないので、json 2D配列を保存しています。 2D配列として保存する場合は、ypuを使用する必要があります。$ last_item = end($ data [0]); idを抽出します。 – Learner

+0

すべてのクイック応答ありがとう!エラー自体は修正されましたが、私はまだIDを抽出してインクリメントする問題があります。今のところそれは空のIDを示しています。 – Soshiro

0

これがjsonデータである場合、配列の最後の値を取得するには、まずjson_decodeを使用する必要があります。

$data = '[{"f_name":"Jack","l_name":"Smith","u_email":"[email protected]","u_adress":"Something 1","u_postcode":"1111 AA","u_place":"SomeCity","u_birth":"jjjj-mm-dd","id":"1"}]'; 

あなたがそれをデコードするとき、それは配列の下にまだあるので、ただ一つの指標、そのインデックスを取得し、これを試してみてください。

$new_data = json_decode($data, true); 
$last_item_id = end($new_data); 
$id = $last_item_id = $last_item_id["id"]; 

$data = array(
'f_name'=>$f_name, 
'l_name'=>$l_name, 
'u_email'=>$u_email, 
'u_adress' =>$u_adress, 
'u_postcode' =>$u_postcode, 
'u_place'=>$u_place, 
'u_birth'=>$u_birth, 
'id' => $id + 1 
); 
+0

コードに基づいて、私はOPが最初のものではなく、jsonファイルの最後の項目のIDを望んでいると思います。 – jeroen

+0

私の答えを編集しました。OPの問題だけでなく、end()がエラーを投げているようです。 –

+1

'$ new_data [0]'は最後の要素ではなく最初の要素を取得します。 – Mike

関連する問題