2016-04-28 22 views
1

2つの配列を比較し、条件に基づいて特定の配列値を更新しようとしています。php特定の配列値を更新できません

欠席生徒の出席配列行き方:

$array1 = 
    array(
    array("student_id" => "2", 
     "date" => "2016-04-24"), 
    array("student_id" => "6", 
     "date" => "2016-04-24")); 
$attendance = json_decode(json_encode($array1)); 

は、すべての学生の学生のリストの配列を取得する:

欠席生徒の唯一の学生のIDを持ち出し
$array2 = 
    array(
    array("student_id" => "1", 
     "Reason" => "", 
     "date" => "2016-04-24"), 
    array("student_id" => "2", 
     "Reason" => "", 
     "date" => "2016-04-24"), 
    array("student_id" => "3", 
     "Reason" => "", 
     "date" => "2016-04-24"), 
    array("student_id" => "6", 
     "Reason" => "1", 
     "date" => "2016-04-24")); 
$students = json_decode(json_encode($array2)); 

:ここ

foreach($attendance as $att) 
{ $atts[] = $att->student_id;} 

を私は学生の配列の学生IDのどれかがIDと一致するかどうかを調べようとしています不在の配列で。 IDが存在する場合、理由を「1」として更新します。そうでない場合は理由を0とします

for ($i = 1; $i <= count($students); $i++) { 
    if(in_array($atts[$i],$students)) 
    { 
     $students->Reason='1'; 
    } 
    else 
    { 
     $students->Reason='0'; 
    } 
} 
echo '<pre>',print_r($students,1),'</pre>'; 

ここでは、学生配列に「理由」値を更新できません。

+6

'json_decode(json_encode($配列1を));' .. whut? –

+1

こんにちはジョン私はPHPの初心者ですし、多次元配列を標準オブジェクトの配列に変換しようとしていました – Ash

+0

さて、まず、配列を使用してください。このようなオブジェクトへの変換の場合には利点はありません。 2) '$ students'はオブジェクトではなく配列なので、' $ students-> Reason'は '$ students [$ i]'を実際に更新したいので理にかなっていません。 3)$ studentsは、複数の配列の配列、または現在あなたのケースのオブジェクトです。あなたの 'in_array'は現在、スカラー値(ID)を配列やオブジェクトと比較しようとしていますが、これは一致しません。 –

答えて

1

あなただけarray2からstudent_idarray1からstudent_idを比較したい場合は、それらが相互に対応する場合array2Reasonを設定し、この使用:

foreach ($array1 as $key1 => $value1) { 
    foreach ($array2 as $key2 => $value2) { 
     if ($value1['student_id'] == $value2['student_id']) { 
      $array2[$key2]['Reason'] = 1; 
     } else if ($array2[$key2]['Reason'] != 1) { 
      $array2[$key2]['Reason'] = 0; 
     } 
    } 
} 
+0

両方の配列で配列要素を増やしているとき、コードは機能しません – Ash

+0

別の配列で増やしましたか?あなたが今持っているものを私に見せてください – Nenroz

+0

私は私の元の質問に変更を加えました。 array1とarray2の両方に配列を追加 – Ash

関連する問題