Sample code for 30+ languages & platforms
PHP ActiveX

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 ActiveX Downloads

PHP ActiveX
<?php

$success = 0;

//  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 COM("Chilkat.StringBuilder");
$success = $sbScript->LoadFile('js_function_array_arg.js','utf-8');
if ($success == 0) {
    print $sbScript->LastErrorText . "\n";
    exit;
}

$js = new COM("Chilkat.Js");

$result = new COM("Chilkat.JsonObject");
$result->EmitCompact = 0;

//  Call Eval to add the function to the context's global object
$success = $js->Eval($sbScript,$result);
if ($success == 0) {
    //  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 COM("Chilkat.JsonObject");
$funcCall->EmitCompact = 0;

//  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 COM("Chilkat.JsonArray");

//  The 1st argument in the arguments array is itself an array.
//  Passing -1 indicates to append to the array.
$arg = new COM("Chilkat.JsonArray");
$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 == 0) {
    //  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 COM("Chilkat.StringBuilder");
$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;
}