Значения ключей в разных массивах - PullRequest
0 голосов
/ 27 февраля 2019

Итак, у меня есть запрос, который возвращает следующие результаты в PHP, и я пытаюсь добавить сумму hours_played, я пробовал array_sum(), но это, похоже, не работает, я хотел бы бытьв состоянии добавить значения hours_played к 11, таким образом я могу передать ему другую функцию:

Array
(
   [id] => 1
   [team_id] => 1
   [hours_played] => 1
)
Array
(
   [id] => 2
   [team_id] => 1
   [hours_played] => 4
)
Array
(
   [id] => 3
   [team_id] => 1
   [hours_played] => 6 
)

Я немного растерялся, и мне нужно хранить способные массивы в другоммассив, чтобы иметь возможность сделать это?Приведенные выше результаты взяты из SQL-запроса и выводятся на странице, когда я print_r переменная $row.

$sql = "SELECT * FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);

while($row = mysql_fetch_assoc($res)){
   print_r($row);
}

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Вы можете либо суммировать все столбцы hours_played после извлечения результатов и присвоения их в массив, как показано ниже

$sql = "SELECT * FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);
$result = array();
while($row = mysql_fetch_assoc($res)){
   $result[] = $row;
}

$sum = array_sum(array_column($result, "hours_played"));
echo $sum;

.., либо вы можете суммировать их при зацикливании результатов.

$sql = "SELECT * FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);
$sum = 0;
while($row = mysql_fetch_assoc($res)){
    $sum += $row['hours_played'];
}

echo $sum;

Или, если вам просто нужно общее количество сыгранных часов, вы можете сделать это непосредственно в одном запросе, используя COUNT() в MySQL.

$sql = "SELECT SUM(hours_played) as sum_hours_played FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);

$row = mysql_fetch_assoc($res);
echo $row['sum_hours_played'];

ПРЕДУПРЕЖДЕНИЕ
Не использовать функции mysql_* в новом коде .Они больше не поддерживаются и официально устарели .Смотрите красное поле ?Узнайте вместо этого подготовленные операторы и используйте PDO или MySQLi - , эта статья поможет вам решить, какие именно.

0 голосов
/ 27 февраля 2019

Ты действительно близко.Вам просто нужно добавить третий индекс каждого массива вместе:

$sql = "SELECT * FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);

$total = 0;
while($row = mysql_fetch_assoc($res)){
   $total += $row['hours_played'];
}

CONVERSELY Вы также можете использовать индекс пронумерованный .

$total = 0;
while($row = mysql_fetch_assoc($res)){
   $total += $row[2]; // indexes start at 0
}

echo $total; // Will print 11 if your arrays you posted are correct.

ДОПОЛНИТЕЛЬНО --- ПРЕДУПРЕЖДЕНИЕ !! Вы должны использовать mysqli вместо гораздо менее безопасного и теперь устарело mysql

0 голосов
/ 27 февраля 2019

Наиболее важно
Избегайте использования mysql_* функций .Они больше не поддерживаются , а также официально устарели .Прочтите об использовании подготовленных операторов и измените существующий код на использование PDO или MySQLi

. Вы можете получитьвсего hours_played в цикле while.Попробуйте это:

$sql = "SELECT * FROM table1 WHERE team_id = 1";
$res = mysql_query($sql);

$total_hours_played = 0; // initialize a variable to get sum of hours
while($row = mysql_fetch_assoc($res)){
   $total_hours_played += $row['hours_played'];
}
echo $total_hours_played;
0 голосов
/ 27 февраля 2019
$sum = array_sum(array_column($array, 'hours_played'));
...