如何用sprintf读取php代码

I am self-learning php and I want to ask if am I reading this part of code correctly? If powers is not empty, than make array from values, also each power will act like power_id. But $values[] is same as array_pust() ? And sprintf('(%d, %d)' will put decimal numbers to character_id and power?

 $character_id = mysql_insert_id($db);
  if(!empty($_POST['powers'])) { 
  $values = array();
  foreach ($_POST['powers'] as $power_id) {
  $values[] = sprintf('(%d, %d)', $character_id, $power_id);  
  }

Almost as you described. array_push() can add multiple values at once, whereas single square bracket notation pushes one value onto the end of the array.

$_POST['powers'] contains an array of values, so the foreach loop will iterate through these elements, and it refers to each element as $power_id within the loop.

$values = array() isn't strictly neccesary in this example, however it does declare $values to be an empty array, so makes the code clearer to understand. If you omit this line, PHP will deduce you wish to initialise an array when you first assign a value to it inside your foreach loop.