Sample code for 30+ languages & platforms
PHP Extension

Call a JavaScript Function Passing an Array Argument

See more JavaScript Examples

Demonstrates how to call a JavaScript function with an argument that is an array.

Chilkat PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

$success = false;

//  This is the JavaScript function we'll call:

//  function calculateTotal(numbers) {
//    console.log(numbers);
//    let total = 0;
//    
//    // Loop through every number in the array
//    for (const num of numbers) {
//      console.log(num);
//      total += num;
//    }
//    
//    return total;
//  }

$sbScript = new CkStringBuilder();
$success = $sbScript->LoadFile('js_function_array_arg.js','utf-8');
if ($success == false) {
    print $sbScript->lastErrorText() . "\n";
    exit;
}

$js = new CkJs();

$result = new CkJsonObject();
$result->put_EmitCompact(false);

//  Call Eval to add the function to the context's global object
$success = $js->Eval($sbScript,$result);
if ($success == false) {
    //  Examine the result for an exception.
    print $result->emit() . "\n";

    //  Also examine the LastErrorText.
    print $js->lastErrorText() . "\n";
    exit;
}

//  ------------------------------------------------------------------------------
//  Call the function calculateTotal(numbers)

$funcCall = new CkJsonObject();
$funcCall->put_EmitCompact(false);

//  Create JSON specifying the function name and arguments
//  In this case, there is only 1 argument, and it is an array.

$funcCall->UpdateString('name','calculateTotal');

//  Create the arguments array.
$argsArray = new CkJsonArray();

//  The 1st argument in the arguments array is itself an array.
//  Passing -1 indicates to append to the array.
$arg = new CkJsonArray();
$argsArray->AddArrayAt2(-1,$arg);

//  Fill in the values for the 1st argument.
$arg->AddNumberAt(-1,'10.50');
$arg->AddNumberAt(-1,'20.00');
$arg->AddNumberAt(-1,'5.25');

//  Add the "args" array to the funcCall.
$funcCall->AppendArrayCopy('args',$argsArray);

print $funcCall->emit() . "\n";

//  The funcCall is as follows.  Notice that the 1st (and only) argument is an array.

//  {
//    "name": "calculateTotal",
//    "args": [
//      [
//        10.50,
//        20.00,
//        5.25
//      ]
//    ]
//  }

$success = $js->CallFunction($funcCall,$result);
if ($success == false) {
    //  Examine the result for an exception.
    print $result->emit() . "\n";

    //  Also examine the LastErrorText.
    print $js->lastErrorText() . "\n";
    exit;
}

print $result->emit() . "\n";

//  Result:
//  {
//    "type": "double",
//    "value": 35.75
//  }

//  The function also emitted text to the console.

$sbOut = new CkStringBuilder();
$js->ConsoleOutputSb($sbOut);
print $sbOut->getAsString() . "\n";

//  Output:
//  10.5,20,5.25
//  10.5
//  20
//  5.25

//  -----------------------------------------------------------
//  Note: If the array argument is simple, this is an alternative
//  and simpler way of creating the funcCall:

$funcCall->Clear();
$funcCall->UpdateString('name','calculateTotal');
$funcCall->UpdateNumber('args[0][0]','10.50');
$funcCall->UpdateNumber('args[0][1]','20.00');
$funcCall->UpdateNumber('args[0][2]','5.25');
print $funcCall->emit() . "\n";

?>
JavaScript
function calculateTotal(numbers) {
  console.log(numbers);
  let total = 0;
  
  // Loop through every number in the array
  for (const num of numbers) {
    console.log(num);
    total += num;
  }
  
  return total;
}