2013-03-04 2 views
2

У меня есть скрипт для добавления элементов в db.Если значение в многомерном массиве не задано, весь массив содержит

В настоящее время я массив создается так:

foreach(blah as $album){ 

$add[] = array('album' => $album['name'], 
       'test' => $album['test'] 
      ); 

} // end foreach 

название альбома не всегда уникальна, и $album['test'] может быть случайный текст (который используется в дальнейшем), или он может быть «FALSE» (когда я говорю «ложь», я имею в виду слово «ложь», написанное текстовыми буквами)

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

так это:

array(array('album' => 'album_name1', 'test' => 'xqus8n4n'), 
     array('album' => 'album_name1', 'test' => 'FALSE'), 
     array('album' => 'album_name1', 'test' => 'jdh4dhdk'), 
     array('album' => 'album_name2', 'test' => 'hdis8ebk'), 
     array('album' => 'album_name2', 'test' => 'hisb8bs7'), 
     array('album' => 'album_name2', 'test' => 'FALSE'), 
     array('album' => 'album_name3', 'test' => 'yek98abk'), 
     array('album' => 'album_name3', 'test' => '8iksh2q7') 
    ); 

становится этим:

array(array('album' => 'album_name1', 'test' => 'FALSE'), 
     array('album' => 'album_name2', 'test' => 'FALSE'), 
     array('album' => 'album_name3', 'test' => 'yek98abk'), 
     array('album' => 'album_name3', 'test' => '8iksh2q7') 
    ); 

Надеюсь, это имеет смысл, поскольку это может показаться немного запутанным, если вы не знаете всю мою структуру сценария, поэтому я дал так много информации.

ответ

1
$multiarray = array(
     array('album' => 'album_name1', 'test' => 'xqus8n4n'), 
     array('album' => 'album_name1', 'test' => 'FALSE'), 
     array('album' => 'album_name1', 'test' => 'jdh4dhdk'), 
     array('album' => 'album_name2', 'test' => 'hdis8ebk'), 
     array('album' => 'album_name2', 'test' => 'hisb8bs7'), 
     array('album' => 'album_name2', 'test' => 'FALSE'), 
     array('album' => 'album_name3', 'test' => 'yek98abk'), 
     array('album' => 'album_name3', 'test' => '8iksh2q7') 
    ); 

$keysToRemove = array(); 

// Go and find all the FALSE values and which albums they belong to 
foreach ($multiarray as $album) { 
    if (in_array('FALSE', $album)) { 
    $keysToRemove[] = $album['album']; 
    } 
} 

// Remove all instances of the albums that had FALSE values 
// except the ones that had the word FALSE (we keep those :p) 
for($i = 0; $i < count($multiarray); $i++) { 
    if ((in_array($multiarray[$i]['album'], $keysToRemove)) && ($multiarray[$i]['test'] != 'FALSE')){ 
     unset($multiarray[$i]); 
    } 
} 

// reset keys so that they are numerical again. 
$multiarray = array_values(array_filter($multiarray)); 

print_r($multiarray); 

дает следующий результат:

Array ( 
    [0] => Array ([album] => album_name1 [test] => FALSE) 
    [1] => Array ([album] => album_name2 [test] => FALSE) 
    [2] => Array ([album] => album_name3 [test] => yek98abk) 
    [3] => Array ([album] => album_name3 [test] => 8iksh2q7) 
) 
+0

это выглядит многообещающе ... но я не хочу удалять альбомы, у которых не было ложных значений, если для этого массива существует ложное значение ... извините :) –

+0

Ну, попробуйте мой обновленный код выше, кажется, дает вам результаты вы хотите – Husman

+0

thats легендарная благодарность ... очень оцененный fella., он работает сейчас !!! –

0

Используйте функцию PHP array_key_exists()

foreach($album as $alb){ 

if (array_key_exists('FALSE', $alb)) { 

    // Remove other array keys or save into new array 
} 

} // end foreach 
+0

я попробовал этот код echoing $ alb, в который вы помещаете сохранение в новый массив ... и не получило вывода на все ..., которые ищут, если ключ массива называется «FALSE», мне нужно выполнить поиск значений, и если одно из значений «test» равно «false», тогда все остальные массивы с тем же именем альбома будут отменены. очень ценится, хотя –

+1

Да, извините, in_array («FALSE», $ alb) сделал бы трюк. Затем сохраните массив для удаления других узлов позже. – karmafunk

0

это дает вывод вы хотите

function array_searches($item,$key,$keys,$value){ 
    if($key[$keys]==$value){ 
    return true; 
    } 
    return false; 
    } 
    $array= array(
      array('album' => 'album_name1', 'test' => 'xqus8n4n'), 
      array('album' => 'album_name1', 'test' => 'FALSE'), 
      array('album' => 'album_name1', 'test' => 'jdh4dhdk'), 
      array('album' => 'album_name2', 'test' => 'hdis8ebk'), 
      array('album' => 'album_name2', 'test' => 'hisb8bs7'), 
      array('album' => 'album_name2', 'test' => 'FALSE'), 
      array('album' => 'album_name3', 'test' => 'FALdsfSE'), 
     array('album' => 'album_name3', 'test' => 'FALsdfSE'), 
    ); 

    $i=0; 


function custom_op($array){ 
$new_array=array(); 
foreach ($array as $key=>$value){ 
if(array_custom_search($key,$value,'test','FALSE')){ 
$new_array[]=$value; 
foreach($array as $key1=>$value1){ 
if(array_search($key1,$value1,'album',$value['album'])){ 
unset($array[$key1]);//unset the array value where 'test' is false 
} 
} 
} 
} 


foreach ($new_array as $key=> $value){ 
$array[]=$value; 
} 
echo "<pre>asdf"; 
print_r($array); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^