2014-05-18 4 views
0

У меня есть проблемы с поиском в массивах, в 2-х массивах, первый массив имеет одну структуры фиксированную и второй отправить ВАР из URL и может иметь несколько значений пустые, напримерПоиска в 2-х массивах

ПЕРВОГО ARRAY :

структуры это так:

значение идентификатора, значение кошки, значение подкатегории и значение страны

$ar_val="134567,dogs,food,EEUU"; 

Второй вар получить от URL

$ar_url="134567,dogs,toys,EEUU"; 

Как вы можете видеть на второй вар, $ ar_url у меня есть одно значение не то же к первой структуре $ ar_val в этом случае игрушки

Я хочу получить сравнить фиксированную структуру $ ar_val и получить, если оно истинно или ложно, если имеют одинаковое значение в том же порядке, от $ ar_val

Я стараюсь это:

$ar_val="134567,dogs,food,EEUU"; 
$ar_url="134567,dogs,toys,EEUU"; 


$exp_ar_val=explode(",",$ar_val); 
$exp_ar_url=explode(",",$ar_url); 


foreach ($exp_ar_val as $exp_ar_val2) 
{ 
$ar_val_end[]=$exp_ar_val2; 
} 

foreach ($exp_ar_url as $exp_ar_url2) 
{ 
$ar_val_end2[]=$exp_ar_url2; 
} 



$end_results=array_intersect($ar_val_end,$ar_val_end2); 

С этим я хочу знать, например: если я ищу по id и, например, для cat, получаю положительный результат в 2 массивах, у меня есть одни и те же данные, но если поиск субката я не могу получить, потому что Дифференца в одном нет пищи и в других есть игрушки, но с array_intersect не получить это для сравнения

Thank's, с уважением

+0

Вы нашли ответ? – Bogdan

ответ

0

Я думаю, что он хочет, чтобы проверить, если значение существует в любом массиве. попробуйте это ...

<? 
function inarray($value,$array=array()){ 

    if(in_array($value,$array)){ 
     return true; 
    }else{ 
     return false; 
    } 
} 

$ar_val=array("134567","dogs","food","EEUU"); 
$ar_url=array("134567","dogs","toys","EEUU"); 

$a = inarray("food",$ar_val); 
$b = inarray("food",$ar_url); 

if($a!=false and $b!=false) 
    echo "Found in both arrays"; 
elseif($a==true and $b==false) 
    echo "Found in first array";  
elseif($a==false and $b==true) 
    echo "Found in second array"; 
else 
    echo "Not Found in any array"; 

?> 
0

Вы можете использовать array_diff для этого, который идеально подходит для сравнения:

<?php 
    $ar_val= array ("0" => "134567", "1" => "dogs", "2" => "food", "3" => "EEUU"); 
    $ar_url= array ("0" => "134567", "1" => "dogs", "2" => "EEUU", "3" => "food"); 

    $result = array_diff($ar_val, $ar_url); 

    $num = 0; 
    if ($result != NULL) { 
      echo "unique array keys: TRUE" . "\n\n"; 
      print_r($result); 
      echo "\n\n"; 
     } else { 
      echo "unique array keys: FALSE" . "\n\n"; 
     } 

     foreach($ar_val as $key) { 
      if ($ar_val[$num] != $ar_url[$num]) { 
       echo "intersecting array key different: TRUE" . "\n> "; 
       print_r($ar_val[$num]); 
       echo "\n\n"; 
       } 
      $num++; 
      } 
?> 
0

Попробуйте это:

$ar_val="134567,dogs,food,EEUU"; 
$ar_url="134567,dogs,toys,EEUU"; 

$arrayVal = explode(',', $ar_val); 
$arrayUrl = explode(',', $ar_url); 

$maxLength = max(sizeof($arrayVal), sizeof($arrayUrl)); 
$arrayIdsEqual = array(); 
$arrayIdsDifferent = array(); 

for ($i = 0; $i < $maxLength; $i++) { 
    if (isset($arrayVal[$i]) && isset($arrayUrl[$i])) { 
     if ($arrayVal[$i] == $arrayUrl[$i]) { 
      $arrayIdsEqual[] = $i; 
     } 
     else { 
      $arrayIdsDifferent[] = $i; 
     } 
    } 
    else { 
     //you arrive here if you have 2 arrays that don't have the same size/sme number of variables 
    } 
} 

//assuming your 2 arrays ALWAYS have the same size, you can use the following logic 
if (empty($arrayIdsDifferent)) { 
    echo '2 arrays are the same'; 
} 
else { 
    echo "Differences: \n"; 
    foreach ($arrayIdsDifferent as $indexDifferent => $currentIdDifferent) { 
     $output = 'difference ' . ($indexDifferent + 1) . ': '; 
     $output .= 'val = ' . $arrayVal[$currentIdDifferent]; 
     $output .= '; '; 
     $output .= 'url = ' . $arrayUrl[$currentIdDifferent]; 
     echo $output; 
     echo "\n"; 
    } 
} 

Вы можете увидеть это работает здесь: http://3v4l.org/pTQns

0

Просто сравните их с равными без каких-либо сложных операций.

$ar_val = "134567,dogs,food,EEUU"; 
$ar_url = "134567,dogs,toys,EEUU"; 

$exp_ar_val = explode(",", $ar_val); 
$exp_ar_url = explode(",", $ar_url); 
var_dump($exp_ar_val == $exp_ar_url); // false, elements does not match 

$exp_ar_url = $exp_ar_val; 
var_dump($exp_ar_val == $exp_ar_url); // true, all elements match 

shuffle($exp_ar_url); 
var_dump($exp_ar_val == $exp_ar_url); // false, different order