У меня была эта ошибка, когда я пытался реализовать пользовательский ViewCell для таблицы. Когда я выделил контроллер View для XIB и подключился к элементам CellView, возникла ошибка «этот класс не является ключевым значением, совместимым с кодировкой для ключа», как только я удалю их, он избавился от этой ошибки.
Удалить соединения на изображении ниже. [/g0]
Просто убедитесь, что у вас есть только соединения с ячейкой Table View. Для проверки нажмите на ячейку просмотра таблицы и в INSPECTOR найдите свои соединения.
[/g1]
Итак, сначала вопрос, сколько комбинаций есть? И ответ заключается в том, что вам нужно умножить количество каждого массива друг на друга.
So (c = amount1):
carray 1 * carray 2 * ... * carray n
blockquote>И конкретный для вашего примера:
carray 1 * carray 2 * carray 3 = 2 * 2 * 2 = 8
blockquote>* 1 И если вы задаетесь вопросом, почему я выбрал c для суммы, из-за функции count () в php
Получение всех комбинаций вместе
Как мы получите все комбинации с количеством массивов, которые у нас есть?
Пролистываем все наши комбинации, которые у нас уже есть (начиная с одной комбинации, «пустая комбинация» (
$combinations = [[]];
)) , и для каждой комбинации мы переходим через наш следующий массив данных и объединяем каждую комбинацию с каждым входным данным в новую комбинацию.Теперь мы делаем это, пока не получим желаемую длину для каждой комбинации.
Итак, в качестве примера:
Array with the elements (Empty array is '[]'): [ [1, 2], [3, 4] ]
//↓ new combinations for the next iteration │ array NAN*: Combinations: - [] │ -> [] │ array 1 [1,2]: ┌─────────────┤ │ │ Combinations: v v - [] + 1 │ -> [1] - [] + 2 │ -> [2] │ array 2 [3,4]: ┌─────────────┤ │ │ Combinations: v v - [] + 3 │ -> [3] - [] + 4 │ -> [4] - [1] + 3 │ -> [1,3] //desired length 2 as we have 2 arrays - [1] + 4 │ -> [1,4] //desired length 2 as we have 2 arrays - [2] + 3 │ -> [2,3] //desired length 2 as we have 2 arrays - [2] + 4 │ -> [2,4] //desired length 2 as we have 2 arrays //↑ All combinations here
* NAN: не число
Итак, как вы можете видеть в выше, мы теперь имеем все комбинации с длиной количества всех массивов, которые у нас есть.
. Но чтобы получить только комбинации с нужной длиной, мы переписываем массив результатов на каждую итерацию, так что на end, только комбинации с ожидаемой длиной находятся в массиве результатов.
Код:
Выход<?php $array1 = array(1,2); $array2 = array(4,5); $array3 = array(7,8); $combinations = [[]]; $data = [ $array1, $array2, $array3, ]; $length = count($data); for ($count = 0; $count < $length; $count++) { $tmp = []; foreach ($combinations as $v1) { foreach ($data[$count] as $v2) $tmp[] = array_merge($v1, [$v2]); } $combinations = $tmp; } print_r($combinations); ?>
:
Array ( [0] => Array ( [0] => 1 [1] => 4 [2] => 7 ) //... [7] => Array ( [0] => 2 [1] => 5 [2] => 8 ) )
Для ассоциативных массивы, вам нужно сделать лишь небольшую модификацию:
- Сначала назначьте ключи массивов переменной
array_keys()
, например$keys = array_keys($data);
- Используйте клавиши во втором цикле foreach для доступа к массиву данных, значит: от
до:foreach ($data[$count] as $v2)
foreach ($data[$keys[$count]] as $v2)
<?php
$color = array('Blue','Red','Black','Green');
$size = array('L','M','S','XL','XXL');
$type = array('Half selevs','full seleves');
$options = [
$color,
$size,
$type,
];
$combinations = getCombinations($options);
print_r($combinations);
function getCombinations($options){
$combinations = [[]];
for ($count = 0; $count < count($options); $count++) {
$tmp = [];
foreach ($combinations as $v1) {
foreach ($options[$count] as $v2)
$tmp[] = array_merge($v1, [$v2]);
}
$combinations = $tmp;
}
return $combinations;
}
?>
Выход:
Array
(
[0] => Array
(
[0] => Blue
[1] => L
[2] => Half selevs
)
[1] => Array
(
[0] => Blue
[1] => L
[2] => full seleves
)
[2] => Array
(
[0] => Blue
[1] => M
[2] => Half selevs
)
[3] => Array
(
[0] => Blue
[1] => M
[2] => full seleves
)
[4] => Array
(
[0] => Blue
[1] => S
[2] => Half selevs
)
[5] => Array
(
[0] => Blue
[1] => S
[2] => full seleves
)
[6] => Array
(
[0] => Blue
[1] => XL
[2] => Half selevs
)
[7] => Array
(
[0] => Blue
[1] => XL
[2] => full seleves
)
[8] => Array
(
[0] => Blue
[1] => XXL
[2] => Half selevs
)
[9] => Array
(
[0] => Blue
[1] => XXL
[2] => full seleves
)
[10] => Array
(
[0] => Red
[1] => L
[2] => Half selevs
)
[11] => Array
(
[0] => Red
[1] => L
[2] => full seleves
)
[12] => Array
(
[0] => Red
[1] => M
[2] => Half selevs
)
[13] => Array
(
[0] => Red
[1] => M
[2] => full seleves
)
[14] => Array
(
[0] => Red
[1] => S
[2] => Half selevs
)
[15] => Array
(
[0] => Red
[1] => S
[2] => full seleves
)
[16] => Array
(
[0] => Red
[1] => XL
[2] => Half selevs
)
[17] => Array
(
[0] => Red
[1] => XL
[2] => full seleves
)
[18] => Array
(
[0] => Red
[1] => XXL
[2] => Half selevs
)
[19] => Array
(
[0] => Red
[1] => XXL
[2] => full seleves
)
[20] => Array
(
[0] => Black
[1] => L
[2] => Half selevs
)
[21] => Array
(
[0] => Black
[1] => L
[2] => full seleves
)
[22] => Array
(
[0] => Black
[1] => M
[2] => Half selevs
)
[23] => Array
(
[0] => Black
[1] => M
[2] => full seleves
)
[24] => Array
(
[0] => Black
[1] => S
[2] => Half selevs
)
[25] => Array
(
[0] => Black
[1] => S
[2] => full seleves
)
[26] => Array
(
[0] => Black
[1] => XL
[2] => Half selevs
)
[27] => Array
(
[0] => Black
[1] => XL
[2] => full seleves
)
[28] => Array
(
[0] => Black
[1] => XXL
[2] => Half selevs
)
[29] => Array
(
[0] => Black
[1] => XXL
[2] => full seleves
)
[30] => Array
(
[0] => Green
[1] => L
[2] => Half selevs
)
[31] => Array
(
[0] => Green
[1] => L
[2] => full seleves
)
[32] => Array
(
[0] => Green
[1] => M
[2] => Half selevs
)
[33] => Array
(
[0] => Green
[1] => M
[2] => full seleves
)
[34] => Array
(
[0] => Green
[1] => S
[2] => Half selevs
)
[35] => Array
(
[0] => Green
[1] => S
[2] => full seleves
)
[36] => Array
(
[0] => Green
[1] => XL
[2] => Half selevs
)
[37] => Array
(
[0] => Green
[1] => XL
[2] => full seleves
)
[38] => Array
(
[0] => Green
[1] => XXL
[2] => Half selevs
)
[39] => Array
(
[0] => Green
[1] => XXL
[2] => full seleves
)
)