1

私はこのような配列を持っています:

Array (
    0 => Array ( 
        'id' => 1,
        'name' => 'Hack n\' Slash',
        'slug' => 'hack-n-slash',
        'popular' => 0
    ),
    1 => Array ( 
        'id' => 2,
        'name' => 'FPP',
        'slug' => 'fpp',
        'popular' => 1
    ),  
    2 => Array ( 
        'id' => 3,
        'name' => 'RPG',
        'slug' => 'rpg',
        'popular' => 1
    )
)

私が欲しいのは、それをキーで2つの配列に分割することですpopular。そのため、次のようなリストがあります。

人気:

  • 1
  • 2

不人気:

  • 1
  • 2

私は次のようにif/elseを使用してみました:

foreach($genres as $genre) : 
    if($genre['popular'] == '1' : 
        echo $genre['name']; 
    endif; 
endforeach;

しかし、その後、別のステートメント(if($genre['popular'] == '0'))を追加すると、かなり乱雑だったため、使用できませんでした。

どうすればこれを達成できますか?

4

4 に答える 4

1
<?php

    $pages   = array(
        array(
            "id"      => 1,
            "name"    => "Hack n' Slash",
            "slug"    => "hack-n-slash",
            "popular" => 0
        ),
        array(
            "id"      => 2,
            "name"    => "FPP",
            "slug"    => "fpp",
            "popular" => 1
        ),
        array(
            "id"      => 3,
            "name"    => "RPG",
            "slug"    => "rpg",
            "popular" => 1
        )
    );
    $results = array();
    foreach ($pages as $page) {
        $results[$page["popular"]][] = $page["name"];
    }

    print_r($results);

この場合、$results[0]人気のないページのリストと人気$results[1]のあるページのリストが含まれます。

于 2012-08-03T08:41:20.627 に答える
0

のようなことをしてみませんか

$popular = array();
$notPopular = array();
foreach($genres as $genre) {
    if($genre['popular'] == '1')
        $popular[] = $genre;
    else
        $notPopular[] = $genre;
}

そして、コードで中括弧を使用していますか?:)

于 2012-08-03T08:45:29.533 に答える
0

分割するキーの配列を作成します(これをキー配列と呼びます)。元の配列のエントリごとに、そのキーがまだkey-arrayに存在しない場合は、そのための新しいArray()を作成します。次に、エントリをキー配列配列にプッシュするだけです。

function split_by_key($entries, $key) {
    $results = array();
    foreach ($entries as $entry) {
        $results[$entry[$key]][] = $entry;
    }
    return $results;
}

使用

$by_popularity = split_by_key($pages, 'popular');
$popular = $by_popularity[1];
$not_popular = $by_popularity[0];
于 2012-08-03T08:41:22.167 に答える
0

PHPクロージャを利用した、より一般的なソリューション

$pages   = array(
        array(
            "id"      => 1,
            "name"    => "Hack n' Slash",
            "slug"    => "hack-n-slash",
            "popular" => 0
        ),
        array(
            "id"      => 2,
            "name"    => "FPP",
            "slug"    => "fpp",
            "popular" => 1
        ),
        array(
            "id"      => 3,
            "name"    => "RPG",
            "slug"    => "rpg",
            "popular" => 1
        )
    );

function myFilter($arrayValues,$key,$value) {
    return array_filter($arrayValues,
                        function($entry) use ($key,$value) {
                            return $entry[$key] == $value;
                        }
            );
}

$popular = myFilter($pages,'popular',1);
var_dump($popular);
$unpopular = myFilter($pages,'popular',0);
var_dump($unpopular);
于 2012-08-03T08:53:57.213 に答える