2

データベースにアイテムを追加するスクリプトがあります。

現在、次のように配列が作成されています。

foreach(blah as $album){

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

} // end foreach

アルバム名は常に一意であるとは限らず$album['test']、ランダムなテキスト(後で使用されます)または「FALSE」(falseと言う場合、つまり、テキスト文字で綴られたfalseという単語)にすることができます。

配列を検索し、名前とテスト値を比較する関数が必要です...アルバム名ごとにいくつかのエントリがあり、いくつかの異なるランダムなテキスト値があり、1つは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')
     );

私のスクリプト構造全体を知らない限り、少し混乱しているように見えるかもしれないので、これが理にかなっていることを願っています。これが、私が多くの情報を提供した理由です。

4

3 に答える 3

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 ) 
) 
于 2013-03-04T11:30:46.710 に答える
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
于 2013-03-04T11:22:12.850 に答える
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);
}
于 2013-03-04T12:25:48.617 に答える