Я пытаюсь выполнить код, вызывая функцию, но результат отличается от выполнения кода сам по себе
$arr1=array(
0 => array(
"id" => 5,
"SKS" => 2,
"assignStatus" => 0
)
);
$arr2=array(
0 => array(//hari senin
0 => array(//sesi 1
0 => array( //ruang 405
0 => "", //draft
1 => "", //sks
2 => 0 //count3sks
)
)
)
);
//execute code with function
assignNilai($arr2,0,0,0,$arr1,0);
echo $arr2[0][0][0][0]." ".$arr2[0][0][0][1]." ".$arr2[0][0][0][2];
echo "<br>";
//execute code without function
$arr2[0][0][0][0] = $arr1[0]['id'];
$arr2[0][0][0][1] = $arr1[0]['SKS'];
if ($arr2[0][0][0][1]==3) {
$arr2[0][0][0][2] = $csp[0][0][0][2] + 1;
}
echo $arr2[0][0][0][0]." ".$arr2[0][0][0][1]." ".$arr2[0][0][0][2];
function assignNilai($arr2,$hari,$sesi,$ruang,$arr1,$draft){
$arr2[$hari][$sesi][$ruang][0] = $arr1[$draft]['id'];
$arr2[$hari][$sesi][$ruang][1] = $arr1[$draft]['SKS'];
if ($arr2[$hari][$sesi][$ruang][1]==3) {
$arr2[$hari][$sesi][$ruang][2] = $csp[$hari][$sesi][$ruang][2] + 1;
}
}
Я пытаюсь добиться того, что отображается в коде, выполняемом вручную, с помощью функции, как это сделать?
результат при выполнении с функцией равен 0, мой ожидаемый результат - $ arr2, который должен быть заполнен идентификаторами arr1 и sks, и если sks равно 3, значение count3sks внутри $ arr2 будет +1, если sks равно 3, это будет выглядеть вот так: $ arr2 [0] [0] [0] [0] = 5, $ arr2 [0] [0] [0] [1] = 2, $ arr2 [0] [0] [0] [2] ] = 0






Вам нужно понимать объем данных, вам нужно передать данные в функцию, чтобы ссылаться (использовать &) на вашу функцию, чтобы функция могла изменять исходный массив, а не локальную копию данных ...
function assignNilai(&$arr2,$hari,$sesi,$ruang,$arr1,$draft){
Бит &$arr2 позволяет функции изменять исходный массив.
В исходном коде функция работала со своей собственной версией массива, поэтому, когда функция завершилась, эта версия была просто отброшена, а исходное значение массива осталось прежним.
так что мне не хватало способа изменить исходный массив со значением локального массива внутри функции, и использование & в аргументе $ arr2 позволяет это?
Если бы вы повторили свой массив в функции в конце, вы бы получили желаемые значения. Но в области, в которой вы вызываете функцию, эти изменения не вносятся. Когда вы используете &, это фактически означает, что вы работаете с одним и тем же набором значений.
какой результат вы получаете и каков ваш ожидаемый результат?