Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按内部键拆分数组_Php - Fatal编程技术网

Php 按内部键拆分数组

Php 按内部键拆分数组,php,Php,我有这样一个数组: foreach($genres as $genre) : if($genre['popular'] == '1' : echo $genre['name']; endif; endforeach; 数组( 0=>数组( 'id'=>1, 'name'=>'Hack n\'Slash', “slug”=>“hack-n-slash”, “流行”=>0 ), 1=>数组( 'id'=>2, “名称”=>“FPP”, “slug”=>“fp

我有这样一个数组:

foreach($genres as $genre) : 
    if($genre['popular'] == '1' : 
        echo $genre['name']; 
    endif; 
endforeach;
数组(
0=>数组(
'id'=>1,
'name'=>'Hack n\'Slash',
“slug”=>“hack-n-slash”,
“流行”=>0
),
1=>数组(
'id'=>2,
“名称”=>“FPP”,
“slug”=>“fpp”,
“流行”=>1
),  
2=>数组(
'id'=>3,
'name'=>'RPG',
“slug”=>“rpg”,
“流行”=>1
)
)
我想要的是,按键
popular
将其拆分为两个数组,因此我将有一个如下列表:

流行的:

  • 一个
  • 两个
不受欢迎:

  • 一个
  • 两个
我尝试使用if/else如下:

foreach($genres as $genre) : 
    if($genre['popular'] == '1' : 
        echo $genre['name']; 
    endif; 
endforeach;
但是,当我添加另一个语句(
if($genre['popular']='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
        )
    );
    $results = array();
    foreach ($pages as $page) {
        $results[$page["popular"]][] = $page["name"];
    }

    print_r($results);
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];

为要拆分的密钥构建一个数组(我们称之为密钥数组)。对于原始数组中的每个条目,如果其密钥尚未出现在密钥数组中,请为其创建一个新的数组()。然后,只需将条目推入其键数组

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];

为什么不做类似的事情呢

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

在代码中使用花括号?:)

为什么不做这样的事情呢

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

在代码中使用花括号?:)

更通用的解决方案,使用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);

一个更通用的解决方案,使用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);

在发布示例数组时,请同时发布数组的
var\u export()
,因为它会生成有效的PHP代码来帮助我们重现您的问题,而不必从
print\r
输出手动构建数组。好的,谢谢!我在这里发布代码时仍然有问题;)在发布示例数组时,请同时发布数组的
var\u export()
,因为它会生成有效的PHP代码来帮助我们重现您的问题,而不必从
print\r
输出手动构建数组。好的,谢谢!我在这里发布代码时仍然有问题;)