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
将其拆分为两个数组,因此我将有一个如下列表:
流行的:
- 一个
- 两个
- 一个
- 两个
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
输出手动构建数组。好的,谢谢!我在这里发布代码时仍然有问题;)