PDA

View Full Version : جستجوی مقادیر یک آرایه در چندین آرایه



bahrammzm
سه شنبه 16 دی 1393, 01:50 صبح
سلام
فرض کنید آرایه ای به اسم A داریم که شامل چندین کلمه است . در طرف دیگه n تا آرایه داریم که هرکدام از اون ها هم شامل کلمات زیادی هستند.
حالا میخواهیم تک تک کلمه هایی که در آرایه A هستند رو در n آرایه جستجو کنیم و در نتیجه تعداد آرایه هایی که دارای اون کلمه خاص هستند رو برگردونه .
ممنون میشم اگر راهنمایی کنید.

HaZeM+
سه شنبه 16 دی 1393, 10:02 صبح
<?php
$A = array('reza','hassan');
$DB = array(array('ehsan','abbas','mehdi'),array('reza', 'mehdi'),array('hassan'));
//merge arrays
$newArr = array();
$count = (count($DB)-1);
for($i=0;$i<=$count;$i++) {
foreach($DB[$i] as $word) {
$newArr[] = $word;
}
}
$newArr = array_unique($newArr);
//search
$c = 0;
foreach($A as $word) {
if(in_array($word,$newArr)) $c++;
}
echo $c;


اگه میخواید تکراری هارو هم محاسبه کنه : لاین array_unique رو حذف کنید

bahrammzm
سه شنبه 16 دی 1393, 11:23 صبح
<?php
$A = array('reza','hassan');
$DB = array(array('ehsan','abbas','mehdi'),array('reza', 'mehdi'),array('hassan'));
//merge arrays
$newArr = array();
$count = (count($DB)-1);
for($i=0;$i<=$count;$i++) {
foreach($DB[$i] as $word) {
$newArr[] = $word;
}
}
$newArr = array_unique($newArr);
//search
$c = 0;
foreach($A as $word) {
if(in_array($word,$newArr)) $C++‎;
}
echo $c;


اگه میخواید تکراری هارو هم محاسبه کنه : لاین array_unique رو حذف کنید
میخوام به این شکل باشه :
reza :1
hassan : 1
.....
یعنی تعداد آرایه هایی که hassan و reza رو دارن

vb1249
سه شنبه 16 دی 1393, 11:38 صبح
<?php
$b=0;
$co = array("arash","reza","solme","pani","arash","mrbabak");
for($i=0;$i < 6 ;$i++) {
if($co[$i]=="arash") {
$b=$b+1;
}
}
echo "Arash = " . $b;
?>

bahrammzm
سه شنبه 16 دی 1393, 11:57 صبح
<?php
$b=0;
$co = array("arash","reza","solme","pani","arash","mrbabak");
for($i=0;$i < 6 ;$i++) {
if($co[$i]=="arash") {
$b=$b+1;
}
}
echo "Arash = " . $b;
?>

در کل سوال رو متوجه نشدین مثل اینکه

vb1249
سه شنبه 16 دی 1393, 12:12 عصر
در کل سوال رو متوجه نشدین مثل اینکه

الان متوجه شدم
طول هر دو ارایه مساویی هست ؟

bahrammzm
سه شنبه 16 دی 1393, 12:19 عصر
الان متوجه شدم
طول هر دو ارایه مساویی هست ؟
خیر مساوی نیست

HaZeM+
سه شنبه 16 دی 1393, 14:15 عصر
<?php
$A = array('reza','hassan','mohammad','mehdi');
$DB = array(array('ehsan','abbas','mehdi'),array('reza', 'mehdi'),array('hassan'));
//merge arrays
$newArr = array();
$count = (count($DB)-1);
for($i=0;$i<=$count;$i++) {
foreach($DB[$i] as $word) {
$newArr[] = $word;
}
}
//$newArr = array_unique($newArr);
//search
$res = '';
foreach($A as $word) {
$c = 0;
if(in_array($word,$newArr)) $c++;
$res .= $word . " : " . array_count_values($newArr)[$word] . " ,";
}
$res = rtrim($res,' ,');
echo $res;

bahrammzm
سه شنبه 16 دی 1393, 17:17 عصر
<?php
$A = array('reza','hassan','mohammad','mehdi');
$DB = array(array('ehsan','abbas','mehdi'),array('reza', 'mehdi'),array('hassan'));
//merge arrays
$newArr = array();
$count = (count($DB)-1);
for($i=0;$i<=$count;$i++) {
foreach($DB[$i] as $word) {
$newArr[] = $word;
}
}
//$newArr = array_unique($newArr);
//search
$res = '';
foreach($A as $word) {
$c = 0;
if(in_array($word,$newArr)) $C++‎‎‎‎;
$res .= $word . " : " . array_count_values($newArr)[$word] . " ,";
}
$res = rtrim($res,' ,');
echo $res;



ولی این فقط تعداد تکرار های هر کدوم از اسم ها رو نشون میده .

HaZeM+
چهارشنبه 17 دی 1393, 00:22 صبح
داداشی دو حالت داره، یا من سوالو نمیفهمم یا شما بد توضیح دادی

arenaw
چهارشنبه 17 دی 1393, 12:29 عصر
اینه منظورت؟





$myNames = array('ali', 'hasan', 'mammad','gholam');

$herNames[0] = array('ghoslam', 'dfgdfg', 'sdfs');
$herNames[1] = array('ali', 'dfgdfg', 'sdfs');
$herNames[2] = array('mammad', 'dfgdfg', 'sdfs');
$herNames[3] = array('ali', 'dfgdfg', 'hasan');
$herNames[4] = array('zxczxc', 'zxc', 'asdxzc');

$founds = array();

foreach($myNames as $myName)
foreach( $herNames as $herNamesArray )
foreach( $herNamesArray as $herName )
if( $herName == $myName )
$founds[$myName] = isset($founds[$myName])?$founds[$myName]+1:1;

foreach($myNames as $myName)
if( array_key_exists($myName,$founds) )
echo("'$myName' tuye $founds[$myName] araye hast;<br>");
else
echo("'$myName' tuye 0 araye hast;<br>");

bahrammzm
چهارشنبه 17 دی 1393, 16:08 عصر
اینه منظورت؟





$myNames = array('ali', 'hasan', 'mammad','gholam');

$herNames[0] = array('ghoslam', 'dfgdfg', 'sdfs');
$herNames[1] = array('ali', 'dfgdfg', 'sdfs');
$herNames[2] = array('mammad', 'dfgdfg', 'sdfs');
$herNames[3] = array('ali', 'dfgdfg', 'hasan');
$herNames[4] = array('zxczxc', 'zxc', 'asdxzc');

$founds = array();

foreach($myNames as $myName)
foreach( $herNames as $herNamesArray )
foreach( $herNamesArray as $herName )
if( $herName == $myName )
$founds[$myName] = isset($founds[$myName])?$founds[$myName]+1:1;

foreach($myNames as $myName)
if( array_key_exists($myName,$founds) )
echo("'$myName' tuye $founds[$myName] araye hast;<br>");
else
echo("'$myName' tuye 0 araye hast;<br>");



آره خودشه ، فقط اگر بخوایم مقادیر تکراری رو تو هر کدام از خونه های آرایه در نظر نگیره ، array_uniqe رو کجا باید استفاده کنیم؟ مثلا اگر اندیس شماره 1 herNames چندتا ali داشت فقط یکیشو در نظر بگیره

***BiDaK***
چهارشنبه 17 دی 1393, 17:23 عصر
$myNames = array('ali', 'hasan', 'mammad','gholam');

$herNames[0] = array('ghoslam', 'dfgdfg', 'sdfs');
$herNames[1] = array('ali', 'dfgdfg', 'sdfs');
$herNames[2] = array('mammad', 'dfgdfg', 'sdfs');
$herNames[3] = array('ali', 'ali', 'hasan');
$herNames[4] = array('zxczxc', 'zxc', 'asdxzc');

$founds = array();

foreach ($myNames as $value)
{
if (!array_key_exists($value, $founds))
{
$founds[$value] = 0;
}

foreach ($herNames as $result)
{
if (in_array($value, $result))
{
$founds[$value]++;
}
}
}

var_dump($founds);