2014-10-14 21 views
0

У меня есть небольшая проблема, пытающаяся сравнить данные из 3-х массивов, один из которых является источником, а остальные 2 являются условиями.PHP IF ELSE condition and Foreach

сценарий следующий:

$array1 = array('code' => '123', 'code' => '124', 'code' => '125', 'code' => '126', 'code' => '127'); 
$array2 = array(
    array('code1' => '123', 'country' => 'US', 'listed' => '0'), 
    array('code1' => '124', 'country' => 'US', 'listed' => '1'), 
    array('code1' => '125', 'country' => 'US', 'listed' => '1') 
); 
$array3 = array(
    array('code2' => '123', 'country' => 'US', 'listed' => '1'), 
    array('code2' => '126', 'country' => 'US', 'listed' => '0'), 
    array('code2' => '127', 'country' => 'US', 'listed' => '1') 
); 

$final = array_merge($array1,$array2,$array3); 

foreach ($final as $f) { 
    if ($f['code'] == $f['code1']) { 
     if ($f['listed'] > 0) { 
      $finalListed = $f['listed']; 
     } 
    } elseif ($f['code'] == $f['code2']) { 
     if ($f['listed'] > 0) { 
      $finalListed = $f['listed']; 
     } 
    } 

    $newFinalArray = array(
     'code' = $finalCode, 
     'listed' = $finalListed, 
     'country' = $finalCountry 
    ); 
} 

Так что мне нужно, чтобы проверить первый, если код из $array1 существуют в $array2 и если если код из $array2 указан, если не проверить $array3 и так далее ,

Таким образом, если код существует на $array2 и перечислен 1 обновление базы с этим значением, если не проверять $array3, если существует и перечислен в 1 обновление со значениями, если не обновлять значение от $array2

Идеи в том, что $array2 от 1 сайта и $array3 от другого, так что, если не в 1 является вторым, если в обоих подглядывать из $array2

проблема заключается в том, что я не могу получить его сортируют, я попробовал array_combine, но это сочетает в себе только 2 массивы и параметры должны быть точно. С помощью массива merge я получаю 3 массива в один, затем в foreach и on, если условия говорят, что переменная не определена.

+0

насчет in_array()? http://php.net/manual/en/function.in-array.php – Matheno

+0

Вы хотите найти каждый код in_array $ array2 и $ array3?, как я могу сделать foreach для 3-х массивов? – Dario

+0

ehm, что-то вроде foreach ($ array1 as $ key => $ code) {if (in_array ($ code, $ array2) {echo 'В массиве!';} – Matheno

ответ

2

Прежде всего я вижу много вопрос в том, как массивы объявляются вами

Ex -

$array1 = array('code' = > '123', 'code' = > '124', 'code' = > '125', 'code' = > '126', 'code' = > '127'); 

- это не что иное, как

$array1 = array('code' => '127'); //because of same index it will only consider the last value 

Однако я модифицировал ваши массивы и попытался подготовить решение, которое может вам пригодиться. Проверьте его ниже.

<?php 
$array1 = array('123', '124', '125', '126', '127'); 
$array2 = array(array('code' => '123', 'country' => 'US', 'listed' => '0'),  array('code' => '124', 'country' => 'US', 'listed' => '1'), array('code' => '125', 'country' => 'US', 'listed' => '1')); 
$array3 = array(array('code' => '123', 'country' => 'US', 'listed' => '1'), array('code' => '126', 'country' => 'US', 'listed' => '0'), array('code' => '127', 'country' => 'US', 'listed' => '1')); 

function compareSitesAndUpdate($array1, $array2, $array3) { 
    foreach($array1 as $code) { 
    if(isCodeExistsInArray($code,$array2)) { 
     echo $code . ' is in array2 and listed <br />'; 
    } 
    else { // ;(Not in Array2 check in Array3 
     echo $code . ' not listed in array2 - checking in array3 <br />'; 
     if(isCodeExistsInArray($code,$array3)) { 
     echo $code . ' is in array3 and listed <br />'; 
     } 
     else { 
     echo $code . ' not listed in array3 also - do whatever you want to do <br />'; 
     } 
    } 
    } 
} 

//Note $earray is always expected to be in the format of $array2/$array3 
//And key of $array2 and $array3 should always be 'code' - Not necessary to change the keys are they are two diff arrays 
function isCodeExistsInArray($ecode, $earray) { 
    foreach($earray as $code_array) { 
    if($ecode == $code_array['code']) { //code match found - now check if it is listed 
     if($code_array['listed'] == 1) { //Got what we need - return TRUE and Break 
     return TRUE; 
     } 
     } 
    } 

    return FALSE; //any other case return False; 
} 

compareSitesAndUpdate($array1, $array2, $array3); 
?> 
+0

you; re right, я пропустил удаление многомерного массива из первого массива, он работает, но теперь мой вопрос заключается в том, как передать переменную country из array1 и array2 в функцию compareSitesAndUpdate? – Dario

+0

в isCodeExistsInArray() функция you может возвращать массив вместо true и использовать его.Если может объявить глобальную переменную и присвоить ей $ code_array и использовать ее, если вы используете процедурный PHP. Если вы используете OOPS и Classed, вы можете определить переменную класса и обновить его значение с помощью $ code_array и использовать его. – Dharam

0

Почему бы вам не попробовать что-то вроде этого:

foreach($array1 as $key => $code){ 
if(in_array($code, $array2) { 
    echo 'Value is in the array! :D '; 
} 
else { 
    if(in_array($code, $array3) { 
    echo 'Value is in array3! :D'; 
    } 
} 
0

Предположим, что у вас есть один и тот же ключ для кодов в обоих массивах: $array2 и $array3, т.е .:

$array1 = array(
    '123', 
    '124', 
    '125', 
    '126', 
    '127' 
); 

$array2 = array(
    array('code' => '123', 'country' => 'US', 'listed' => '0'), 
    array('code' => '124', 'country' => 'US', 'listed' => '1'), 
    array('code' => '125', 'country' => 'US', 'listed' => '1') 
); 

$array3 = array(
    array('code' => '123', 'country' => 'US', 'listed' => '1'), 
    array('code' => '126', 'country' => 'US', 'listed' => '0'), 
    array('code' => '127', 'country' => 'US', 'listed' => '1') 
); 

Тогда:

$newFinalArray = array_filter(array_merge($array2, $array3), function($el){ 
    if($el['listed'] > 0 && in_array($el['code'], $GLOBALS['array1'])) { 
     return true; 
    } 
});