2013-07-14 2 views
-3

ok, поэтому у меня был следующий код (который работал точно так, как я хотел на массиве) работает над массивом с именем courseInfo() и меняет его.создание кода в функции php

$sizev1 = sizeof($courseInfo); 
for ($row = 0; $row < $sizev1; $row++) 
{ 
$tempsemhrs= $courseInfo[$row][3]; 
$tempday= $courseInfo[$row][4]; 
    if ($tempday == "א") $tempday=1; 
    if ($tempday == "ב") $tempday=2; 
    if ($tempday == "ג") $tempday=3; 
    if ($tempday == "ד") $tempday=4; 
    if ($tempday == "ה") $tempday=5; 
    if ($tempday == "ו") $tempday=6; 
$tempstarttime= $courseInfo[$row][5]; 
    if((StrDelete($tempstarttime, 2, 3)-7) <10) 
     if((StrDelete($tempstarttime, 0, 3)) == "45") 
      $tempstarttime= "0".(StrDelete($tempstarttime, 2, 3)-7+1); 
     else 
      $tempstarttime= "0".(StrDelete($tempstarttime, 2, 3)-7); 
    if((StrDelete($tempstarttime, 2, 3)-7) >=10) 
     if((StrDelete($tempstarttime, 0, 3)) == "45") 
      $tempstarttime= (StrDelete($tempstarttime, 2, 3)-7+1); 
     else 
      $tempstarttime= (StrDelete($tempstarttime, 2, 3)-7);   


$courseInfo[$row][6]= ($courseInfo[$row][2].$tempsemhrs.$tempday.$tempstarttime); 

}

теперь есть еще несколько мест, я, возможно, придется использовать этот код, чтобы я думал о том, что делает его в функцию istead удвоения кодов, но когда я попытался оно не будет работать больше, все я сделал копирование его в функцию {} и изменил имена внутри, и он не работает, я также копирую его здесь, я бы хотел, чтобы кто-то сказал мне, где я ошибся и почему он не работает сейчас?

function addSortingCode ($tableChange) 
{ 
$sizev1 = sizeof($tableChange); 
for ($row = 0; $row < $sizev1; $row++) 
    $tempsemhrs= $tableChange[$row][3]; 
    $tempday= $tableChange[$row][4]; 
     if ($tempday == "א") $tempday=1; 
     if ($tempday == "ב") $tempday=2; 
     if ($tempday == "ג") $tempday=3; 
     if ($tempday == "ד") $tempday=4; 
     if ($tempday == "ה") $tempday=5; 
     if ($tempday == "ו") $tempday=6; 
    $tempstarttime= $tableChange[$row][5]; 
     if((StrDelete($tempstarttime, 2, 3)-7) <10) 
      if((StrDelete($tempstarttime, 0, 3)) == "45") 
       $tempstarttime= "0".(StrDelete($tempstarttime, 2, 3)-7+1); 
      else 
       $tempstarttime= "0".(StrDelete($tempstarttime, 2, 3)-7); 
     if((StrDelete($tempstarttime, 2, 3)-7) >=10) 
      if((StrDelete($tempstarttime, 0, 3)) == "45") 
       $tempstarttime= (StrDelete($tempstarttime, 2, 3)-7+1); 
      else 
       $tempstarttime= (StrDelete($tempstarttime, 2, 3)-7);   


    $tableChange[$row][6]= ($tableChange[$row][2].$tempsemhrs.$tempday.$tempstarttime); 
    } 
} 
addSortingCode ($courseInfo); 
+0

http://php.net/functions - тема более широкая, так что обычно предлагается прочитать руководство по этому вопросу и понять концепцию перед использованием. Вы не так далеко, но считайте, что ваша функция отделена от остальной части кода, а также переменные там. Важно: http://php.net/variables.scope – hakre

ответ

0

Переменная $tableChange не будет изменена внутри функции. Попробуйте пройти по ссылке, а не по изменить сигнатуру функции в

function addSortingCode (&$tableChange) 
+0

Да. Без '&', '$ tableChange' является * копией *' $ courseInfo', поэтому его изменение бессмысленно, если вы не вернете его и не присвоите ему '$ courseInfo'. –

+0

очень много, я действительно этого не знал. работает сейчас :) –

2

вы можете сделать это:

//return the final contructed array(here $tableChange) as function output 
function addSortingCode($tableChange) 
{ 

    //your code 
    return $tableChange; 
} 

//calling of the function 

$output = addSortingCode($courseInfo); 
+0

Это и ответ @ Trung-Hieu Le будут работать. –

Смежные вопросы