array_intersect и различен брой масиви
3 отговора
169 прегледа
array_intersect и различен брой масиви
Здравейте,
задачата е следната: разполагам с няколко масива - винаги различен брой между 1 и 5. Тези масиви съдържат някакви ID номера. Идеята е в един краен масив да получа стойностите (ID номерата), които присъстват във всички масиви.
Много удобна е функцията array_intersec, обаче се сблъсках с един проблем - всеки път имам различен брой масиви! Няма как просто всичките да ги предам като параметри, все някой от тях поне веднъж ще остане празен, а принципно празните масиви не трябва да ги използвам. Трябва да правя сравнението само между масиви, пълни с данни.
Какво да направя?
задачата е следната: разполагам с няколко масива - винаги различен брой между 1 и 5. Тези масиви съдържат някакви ID номера. Идеята е в един краен масив да получа стойностите (ID номерата), които присъстват във всички масиви.
Много удобна е функцията array_intersec, обаче се сблъсках с един проблем - всеки път имам различен брой масиви! Няма как просто всичките да ги предам като параметри, все някой от тях поне веднъж ще остане празен, а принципно празните масиви не трябва да ги използвам. Трябва да правя сравнението само между масиви, пълни с данни.
Какво да направя?
Re: array_intersect и различен брой масиви
$varArray = array
(
array(1, 2, 3),
array(3, 5, 10),
array(3, 2, 12)
)
$resultArray = $varArray[0];
for($i = 1, $i < count($varArray); $i++) $resultArray = array_intersect($resultArray, $varАrray[$i])
(
array(1, 2, 3),
array(3, 5, 10),
array(3, 2, 12)
)
$resultArray = $varArray[0];
for($i = 1, $i < count($varArray); $i++) $resultArray = array_intersect($resultArray, $varАrray[$i])
Re: array_intersect и различен брой масиви
мога да ти предложа една изключително много използвана от мене техника - а именно да използваш call_user_func_array(function, parameters) - на моменти можеш да направиш чудеса с нея...
ето и малко код:
параметъра $param можеш да си го запълниш както намериш за добре, зависи как ти идват масивите...
ако ти се налага, дори можеш да викнеш метод на обект, достатъчно е за function параметъра да предадеш масив с два елемента от вида
array($objectVar, "methodName")
Just a genius
ето и малко код:
<?php
# initial array
$a=array();
$a[0]=array(1, 2, 4);
$a[1]=array(1, 2, 3, 4);
$a[2]=array();
$a[3]=array(4, 2, 1);
# "parameter" array (only non-empty elements of initial array will be transfered)
$param=array();
foreach($a as $v) if (!empty($v)) $param[]=$v;
# pass non-empty arrays as parameter of user func "array_intersect"
# (in fact it is built-in)
$array=call_user_func_array("array_intersect", $param);
print_r($array);
?>
параметъра $param можеш да си го запълниш както намериш за добре, зависи как ти идват масивите...
ако ти се налага, дори можеш да викнеш метод на обект, достатъчно е за function параметъра да предадеш масив с два елемента от вида
array($objectVar, "methodName")
Re: array_intersect и различен брой масиви
Благодаря! Този код ми свърши много добра работа.