2016-06-03 2 views
0

Как включить тот же массив внутри цикла foreach и удалить одно и то же значение внутри другого массива. Мои навыки PHP не являются сильными, и я хотел бы получить помощь от экспертов здесь. См. Приведенный ниже сценарий.PHP - массив в одном массиве

$array = array("group1","group2","group3","group4"); 
//Result should be 
group1 = group2,group3,group4 
group2 = group1,group3,group4 
group3 = group1,group2,group4 
group4 = group1,group2,group3 

Я только:

$array = array('group1','group2','group3','group4'); 


foreach($array as $value){ 
    echo '<br>'.$prodfilters.'= <br>'; 
    foreach($arrayFilter as $xx){ 
    echo $xx.'<br>'; 
    } 
} 
//Result 
group1 = group1,group2,group3,group4 
group2 = group1,group2,group3,group4 
group3 = group1,group2,group3,group4 
group4 = group1,group2,group3,group4 
//basically repeating itself each value from the outer foreach loop instead of removing the same value from the inner foreach loop. 

Надеется, что вы можете помочь новичку здесь. Заранее спасибо.

+0

является это 'group1 = group2, group3, group4' должен быть строкой или массив? Должен ли он создавать несколько массивов или обновлять исходный? – RomanPerekhrest

+0

Привет, я обновил свой вопрос. Извиняюсь за мое медленное объяснение. –

+0

@RomanPerekhrest Я должен иметь возможность использовать его как переменную вне петли foreach. –

ответ

2

Вот краткое решение с использованием array_walk и array_diff функции:

$array = ["group1","group2","group3","group4"]; 
$result = []; 

array_walk($array, function($v) use(&$result, $array){ 
    $result[$v] = array_diff($array, [$v]); // it can be imploded into a string if needed 
}); 

print_r($result); 

Выход:

Array 
(
    [group1] => Array 
     (
      [1] => group2 
      [2] => group3 
      [3] => group4 
     ) 

    [group2] => Array 
     (
      [0] => group1 
      [2] => group3 
      [3] => group4 
     ) 

    [group3] => Array 
     (
      [0] => group1 
      [1] => group2 
      [3] => group4 
     ) 

    [group4] => Array 
     (
      [0] => group1 
      [1] => group2 
      [2] => group3 
     ) 
) 

Теперь вы можете получить доступ к каждому пункту, указав его «имя» в виде ключа массива, например $result['group3']

+0

Спасибо @RomanPerekhrest, это очень полезно! –

+0

@ kumer0_03, добро пожаловать – RomanPerekhrest

1
<?php 
$array = ["group1","group2","group3","group4"]; 
$new = []; 
foreach ($array as $key1) { 
    $new[$key1] = []; 
    foreach ($array as $key2) { 
     if ($key1 !== $key2) { 
      $new[$key1][] = $key2; 
     } 
    } 
} 
print_r($new); 
+0

Это было быстро, и то, что я искал! Спасибо @mustafayelmer –

0

Я не полностью уверен, чего вы хотите достичь. Вот итеративный предложение:

foreach($array as $value){ 
    $result.=$value.' = '; 
    foreach($array as $value2){ 
     if($value2 != $value){ 
       $result.=$value2.','; 
     } 
    } 
    $result.=rtrim($result,',').'\n'; //replace \n with <br/> for html linefeed 
} 
echo $result; 
0

Вот весело решение, потому что он использует:

И пару полезных функций массива:

Это обеспечит отдельные массивы, каждый из которых назван после их соответствующих значений в основном массиве:

<?php 
$array = array("group1","group2","group3","group4"); 

foreach ($array as $element) 
    $$element = array_values(array_filter($array,function($item) use ($element){return $item !== $element; })); 

Теперь вы можете использовать отдельные массивы их имя индекса:

print_r($group1); 

показывает это:

Array 
(
    [0] => group2 
    [1] => group3 
    [2] => group4 
) 

И вы можете увидеть все переменные в среде с get_defined_vars

print_r(get_defined_vars()); 

показывает это в источнике:

[group1] => Array 
    (
     [0] => group2 
     [1] => group3 
     [2] => group4 
    ) 

[group2] => Array 
    (
     [0] => group1 
     [1] => group3 
     [2] => group4 
    ) 

[group3] => Array 
    (
     [0] => group1 
     [1] => group2 
     [2] => group4 
    ) 

[group4] => Array 
    (
     [0] => group1 
     [1] => group2 
     [2] => group3 
    ) 
Смежные вопросы