У меня есть несколько массивов, как в следующем примере.
$array = array (
'role_1' =>
array (
0 => 'value_2',
0 => 'value_3',
),
'role_2' =>
array (
0 => 'value_1',
1 => 'value_2',
),
'role_3' =>
array (
0 => 'value_2',
1 => 'value_3',
),
)
Мне нравится зацикливаться на подмассивах, чтобы получить только пересечение. Массив создавался динамически, может иметь много подмассивов role_[x]
а также много ключа / значения внутри под-массивов. Ключ не нужен, только значение. Ключ также является счетчиком, а не строкой.
В результате я хотел бы получить в этом примере этот небольшой массив.
$array = array( 'value_2' )
Индексы, «имя-массива», как role_1
из подмассивов не более актуальны после пересечения. Для меня важно, чтобы в результате были значения, в каждом подмассиве существуют только те значения, которые там есть.
Я пытался с источником, но я думаю, что это возможно гораздо проще.
$value_stack = array();
$result = array();
$i = 0;
foreach( $settings_ as $role => $values ) {
foreach( $values as $value ){
if( in_array( $value,$value_stack ) || $i === 0 ) {
$result[ $role ][] = $value;
}
$value_stack[] = $value;
}
$i++;
};
Слияние этого результата с несколькими массивами должно выполняться с array_merge
в петле.
Спасибо за ваше время.
Ты можешь использовать array_intersect чтобы охватить динамику $data
в качестве таких:
$data = array (
'role_1' =>
array (
0 => 'value_2',
1 => 'value_3',
),
'role_2' =>
array (
0 => 'value_1',
1 => 'value_2',
),
'role_3' =>
array (
0 => 'value_2',
1 => 'value_3',
)
);
$result = call_user_func_array('array_intersect', $data);
call_user_func_array поможет распространить элементы вашего массива в качестве параметров внутри array_intersect
,
Вы должны быть в состоянии сделать
call_user_func_array('array_intersect', $array_of_arrays)
Это передаст каждый элемент вашего массива в качестве аргумента array_intersect
, который принимает переменное число массивов в качестве аргументов и возвращает их пересечение.
array_intersect работать для этого:
$data = array (
'role_1' =>
array (
0 => 'value_2',
1 => 'value_3',
),
'role_2' =>
array (
0 => 'value_1',
1 => 'value_2',
),
'role_3' =>
array (
0 => 'value_2',
1 => 'value_3',
)
);$result = array_intersect($data['role_1'], $data['role_2'], $data['role_3']);
print_r($result);
результат:
Array ( [0] => value_2 )