PDA

View Full Version : دستور array_intersect_assoc



Salazar.mi
پنج شنبه 23 آبان 1398, 18:56 عصر
سلام میخواهم بدونم دستور array_intersect_assoc

آیا حالتی داره که بشه تنظیم اگر بین مثلا سه آرایه خانه صفر دوتاشون هم کلیدش با هم برابر و هم مقدارشون آن ها را هم نشون بده و بگو از چه آرایه ای هستن
مثلا اینجا


$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("a"=>"red","b"=>"green","g"=>"blue");
$a3=array("a"=>"red","b"=>"green","g"=>"blue");

خروجی دستور اینه


Array ( [a] => red [b] => green )




ولی من میخوام بگه "a"=>"red" و "b"=>"green"برای همه آرایه ها است و "g"=>"blue" برای آرایه دو و سه
آیا دستوری وجود دارد برای اینکار
یا اگر باید خودم دستور را بنویسم میشه کمکم کنید چجوری اینکار را کنم
ممنون میشم

ASHKANLAEI
پنج شنبه 23 آبان 1398, 21:02 عصر
خب این کار شما یعنی این که کل آرایه ها رو در نظر بگیره و فقط اون خونه هایی که در تنها یک آرایه موجودند رو حذف کنه؛ درسته؟

Salazar.mi
پنج شنبه 23 آبان 1398, 22:49 عصر
خب این کار شما یعنی این که کل آرایه ها رو در نظر بگیره و فقط اون خونه هایی که در تنها یک آرایه موجودند رو حذف کنه؛ درسته؟
اینجا آره
ولی من میخوام هر بار بیاد مثلا خانه صفر از همه آرایه ها را درنظر بگیره و و بگه کدوما خانه صفرشون با هم برابر است
امکانش هست ؟؟؟؟؟؟
ممنون میشم کمکم کنید

plague
سه شنبه 28 آبان 1398, 09:52 صبح
میخای خونه ها رو چک کنی یا مقادیر رو چک کنی ؟
مثلا داری
"a"=>"red"

آیا میخای ببینی مقدار red تو کدوم آرایه ها تکرار شده بدون اینکه خونه مهم باشه

یا میخای ببینی کدوم آرایه ها خونه a آنها برابر با red هستش

یا فرقی نمیکنه هردوش ؟!


حالت اول


$result = [] ;

$stack = [

'a1' => ["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"] ,
'a2' => ["a"=>"red","b"=>"green","g"=>"blue"] ,
'a3' => ["a"=>"red","b"=>"green","g"=>"blue"] ,
];

function check_array( $value , $stack , $result ){


foreach ($stack as $k=>$array )
{
if(in_array( $value , $array))
{
if(isset($result[$value]) && !in_array( $k , $result[$value]))
$result[$value][] = $k ;
else
$result[$value] = [$k] ;
}
}

return $result ;

}


foreach ($stack as $array )
{
foreach ($array as $k=>$v )
$result = check_array( $v , $stack , $result );
}


echo "<pre>";
print_r($result);
echo "</pre>";

خروجی



Array
(
[red] => Array
(
[0] => a1
[1] => a2
[2] => a3
)

[green] => Array
(
[0] => a1
[1] => a2
[2] => a3
)

[blue] => Array
(
[0] => a1
[1] => a2
[2] => a3
)

[yellow] => Array
(
[0] => a1
)

)


حالت دوم





$result = [] ;

$stack = [

'a1' => ["a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"] ,
'a2' => ["a"=>"red","b"=>"green","g"=>"blue"] ,
'a3' => ["a"=>"black","b"=>"green","g"=>"blue"] ,
'a4' => ["a"=>"black","b"=>"green","g"=>"blue"] ,
];

function check_array( $key , $value , $stack , $result ){

if(!isset($result[$key]))
$result[$key] = [] ;

$inner_stack = [] ;
foreach ($stack as $k=>$array )
{
if(isset($array[$key]))
$inner_stack[$k] = $array[$key];
}

foreach ($inner_stack as $k=>$v)
{
if(!isset($result[$key][$v]))
$result[$key][$v] = [];

if(!in_array( $k , $result[$key][$v] ))
$result[$key][$v][] = $k ;

}



return $result ;

}


foreach ($stack as $array )
{
foreach ($array as $k=>$v )
$result = check_array( $k , $v , $stack , $result );
}


echo "<pre>";
print_r($result);
echo "</pre>";



خروجی


[a] => Array
(
[red] => Array
(
[0] => a1
[1] => a2
)

[black] => Array
(
[0] => a3
[1] => a4
)

)

[b] => Array
(
[green] => Array
(
[0] => a1
[1] => a2
[2] => a3
[3] => a4
)

)

[c] => Array
(
[blue] => Array
(
[0] => a1
)

)

[d] => Array
(
[yellow] => Array
(
[0] => a1
)

)

[g] => Array
(
[blue] => Array
(
[0] => a2
[1] => a3
[2] => a4
)

)