У меня в основном есть сценарий, в котором я извлекаю список машин, а затем извлекаю весь инвентарь, находящийся в настоящее время внутри них. Если на машине более одного инвентаря одного типа (например, дисков), мой текущий код просто добавляет их в длинную строку, которая выглядит довольно плохо.
Вместо этого я хотел бы сохранить инвентарь в массивы и отслеживать назначенную сумму. Я использую array_key_exists (), чтобы определить, был ли этот тип уже добавлен в массив.
Моя проблема в том, как сохранить счетчик и увеличивать его при каждом обнаружении другого, а затем, когда я добавляю его в другой массив, перезаписываем его, например, «4x 1TB Hard-Drive», «2x 240GB SSD Drive»? Прямо сейчас он добавлен как «Жесткий диск 1TB Hard-Drive1TB Hard-Drive1TB Hard-Drive1TB».
Псевдо-код:
<?
$row = array();
$arrDrive = array();
foreach ($inventory as $item)
{
$invName = getInventoryName($dp_conn, $item["inv_id"]);
$invType = getInventoryTypeName($item["type_id"], $dp_conn);
if ($invType == "Hard-Drive")
{
if (array_key_exists($invName, $arrDrive))
{
$arrDrive[x]++; //???
}
}
}
// Get count of each type of drive and reformat it to 2x DRIVE NAME
$display = $arrDrive[count] . "x " . $arrDrive[Name];
array_push($row, $display);
?>
$ инвентаризация по запросу
[1]=>
array(3) {
["inv_id"]=>
string(2) "16"["type_id"]=>
string(1) "2"["sort_order"]=>
string(1) "0"}
Вместо того, чтобы использовать:
if ($invType == "Hard-Drive")
{
if (array_key_exists($invName, $arrDrive))
{
$arrDrive[x]++; //???
}
}
пожалуйста, используйте:
if (array_key_exists($item["type_id"], $arrDrive))
{
$arrDrive[$item["type_id"]]++;
}
else
{
$arrDrive[$item["type_id"]] = 1;
}
$ arrDrive теперь будет иметь счетчик для каждого типа в вашем инвентаре ($ arrDrive на самом деле не очень хорошее имя в этом отношении)
Других решений пока нет …