Один из способов сделать это, используя данные вашего примера, - использовать дефис и использовать array_count_values в сочетании с array_values для сброса ключей.
Позже вы можете индексировать этот массив, чтобы получить количество циклов. Чтобы получить правильный индекс для $array_sku_new
, $array_Title
и $array_Description
, вы можете использовать счетчик из цикла for и отдельный счетчик, чтобы получить правильный индекс для $array_sku_new
.
Например:
$totals = array_values(array_count_values(array_map(function ($x) {
return explode('-', $x)[0];
}, $array_sku_new)));
$counter = 0;
for ($j = 0; $j < count($totals); $j++) {
for ($i = 0; $i < $totals[$j]; $i++) {
$prod = array(
'SKU' => $array_sku_new [$counter],
'TITLE' => $array_Title [$j],
'DESCRIPTION' => $array_Description [$j],
);
$prods[] = $prod;
$counter ++;
}
}
Я не могу заставить того конструктора работать также. Это однако, кажется, работает:
# $temp = Get-ResourceFiles
$resourceFiles = New-Object System.Collections.ArrayList($null)
$resourceFiles.AddRange($temp)
можно также передать целое число в конструкторе для установки начальной способности.
, Что Вы имеете в виду, когда Вы говорите, Вы хотите перечислить файлы? Почему Вы не можете только проникнуть требуемые значения в новый массив?
Редактирование:
кажется, что можно использовать конструктора Array как это:
$resourceFiles = New-Object System.Collections.ArrayList(,$someArray)
Примечание запятая. Я верю тому, что происходит, то, что при вызове метода.NET Вы всегда передаете параметры как массив. PowerShell распаковывает тот массив и передает его методу как отдельные параметры. В этом случае мы не хотим, чтобы PowerShell распаковал массив; мы хотим передать массив как единый блок. Теперь, оператор запятой создает массивы. Таким образом, PowerShell распаковывает массив, тогда мы создаем массив снова с оператором запятой. Я думаю, именно это продолжается.