2012-02-10 2 views
-1

Я хочу сделать следующее.Проблема с многомерным массивом

Допустим, у нас есть массив как этот

$arr=array(); 
$arr[1]['test1']="something"; 
$arr[1]['test2']="something else" 

...

$arr[2]['test1']="blah blah"; 
$arr[2]['test2']="foo bar" 

...

Я хочу повторить их один за другим, как этот

something something else ... <all elements of $arr[1]> 

blah blah foo bar   ... <all elements of $arr[2]> 

НО!

if($arr[1]['test1']=="something") 
don't echo elements of $arr[1] at all 

Возможно ли это путем создания нового массива, в котором $ arr [1] вообще не существует? Или во время эха?

ответ

0

Может быть, это следует сделать трюк:

// Iterate and show the words 
foreach ($arr as $words) { 
    if (in_array("something", $words)) 
     continue; 

    echo join(' ', $words) . '<br />'; 
} 

continue вызова будет перейти к следующей итерации, поэтому он будет пропускать массив, если он содержит элемент «что-то»

+0

Прочтите внимательно вопрос. Я знаю, что означает «взрыв», но implode не имеет ничего общего с моим вопросом. – heron

+0

@epic_syntax - Там вы идете ... я обновил код;) –

+0

А что, если я не знаю, в каком массиве точно находится «что-то» "(Я имею в виду в $ arr [1] ['test1'] или ... $ arr [n] ['test1'])? Как найти и отключить правильный массив? – heron

0

Вот код , но, пожалуйста, будьте более конкретными, если это не то, что вы имеете в виду. Вы хотите проверить только первый элемент $ arr [1], если это «что-то»? Знаете ли вы все ключи массива? Или: Можно ли сначала пропустить весь массив и удалить некоторые элементы?

$arr=array(); 
$arr[1]['test1']="something"; 
$arr[1]['test2']=" something else1 "; 
$arr[1]['test3']=" something else2 "; 

$arr[2]['test1']=" abc "; 
$arr[2]['test2']=" def "; 
$arr[2]['test3']=" ghi "; 


foreach ($arr as $sub_arr){ 
    if($sub_arr['test1']!="something"){ 
     foreach ($sub_arr as $element){ 
      echo $element; 
     } 
    } 
} 
+0

что делать, если я не знаю, в каком массиве точно находится " что-то "(я имею в виду в $ arr [1] ['test1'] или ... $ arr [n] ['test1'])? Как найти и отключить правильный массив? – heron

+0

Пока вы знаете, что это «$ arr [n] [test1]», мой код должен работать на вас. Просто измените die 1 <-> 2 из приведенного выше массива и посмотрите, что все еще отображается «abc def ghi» –

0
foreach($arr[1] as $value){ 
    if($value == "something"){ 
     unset($arr[1]); 
    } 
} 
sort($arr); 
for($i=0;$i<count($arr);$i++){ 
    echo implode(" ",$arr[$i]); 
    echo "<br>"; 
} 

это будет снята с охраны массив с чем-то значение то вроде будет произошло, и показать его, как вы хотите

0

Вы можете перебрать и добавить логику внутри.

$new=array(); 
$omit = -1; 
foreach($arr as $key => $value){ 
    if($value['test1']=="something"){    
     $omit = $key; 
    }else{ 
     $new[$key] = $value['test1'].' '.$value['test2']; 
    } 
    if(isset($new[$omit])){ 
    unset($new[$omit]); 
    } 
} 

//now print the final array one by one 
foreach($new as $final){ 
    echo $final.'<br/>'; 
} 
Смежные вопросы