我正在尝试过滤关联数组,以便特定键中的某些值将进入特定变量。为了理解这一点,这里有一个我正在尝试做的例子:
输入(来自DB):
Array
(
[0] => Array
(
[id] => '12',
[status] => '0'
)
[1] => Array
(
[id] => '13',
[status] => '1'
)
[2] => Array
(
[id] => '14',
[status] => '1'
)
)
输出(在PHP中):
$status_one =
Array
(
[0] => Array
(
[id] => '13',
[status] => '1'
)
[1] => Array
(
[id] => '14',
[status] => '1'
)
);
$status_zero =
Array
(
[0] => Array
(
[id] => '12',
[status] => '0'
)
)
我知道数组在语法上不正确,但这就是主意。我想根据特定键中的值将一个数组变量拆分为两个单独的变量。
这就是我的权利。我知道这部分是错的。我也尝试过使用array_filter。
foreach ($status as $key => $row) {
if($row['status'] == '1')
{
$status_one[] = $key[$row];
}
if($row['status'] == '2')
{
$status_two[] = $key[$row];
}
}
答案 0 :(得分:1)
你很近..
$status_one = array();
$status_zero = array();
foreach ($status as $key => $row) {
if($row['status'] == '1') $status_one[$key] = $row;
else $status_zero[$key] = $row;
}
var_dump($status_one, $status_zero);
答案 1 :(得分:1)
如果您不喜欢if-else语句,并且更喜欢按状态排序的更通用方法,例如,如果状态突然显示2
$input = array(
array("id" => 1, "status" => 1),
array("id" => 2, "status" => 1),
array("id" => 3, "status" => 0),
array("id" => 4, "status" => 2),
array("id" => 5, "status" => 0)
);
$arr = array();
foreach($input as $key => $item){
$arr[$item['status']][] = $item;
}
ksort($arr, SORT_NUMERIC);
$ arr现在是一个按状态排序的多维数组。
<?php list($status_zero, $status_one, $status_two) = $arr ?>
将各个数组分配给自己的变量。
答案 2 :(得分:0)
希望这有帮助...我认为简单的方法永远是最好的......
function array_group(Array $array, $groupBy){
$grouped_array = [];
for ($i=0; $i<count($array); $i++){
$key_name = $groupBy.'_'.$array[$i][$groupBy];
if (!array_key_exists($key_name, $grouped_array)){
$grouped_array[$key_name] = [];
}
$grouped_array[$key_name][] = $array[$i];
}
return $grouped_array;
}
测试:
$test_array = [["id" => 12, "status" => 0], ["id" => 13, "status" => 1], ["id" => 14, "status" => 1]];
print_r(array_group($test_array, 'status'));
输出:
Array
(
[status_0] => Array
(
[0] => Array
(
[id] => 12
[status] => 0
)
)
[status_1] => Array
(
[0] => Array
(
[id] => 13
[status] => 1
)
[1] => Array
(
[id] => 14
[status] => 1
)
)
)