如何按值过滤关联数组并拆分为两个变量?
How to filter associative array by values and split into two variables?
我正在尝试过滤关联数组,以便特定键中的某些值将进入特定变量。为了理解这一点,这是我正在尝试做的一个例子:
输入(来自数据库):
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];
}
}
你很接近..
$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);
如果您不喜欢 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 ?>
将各个数组分配给它们自己的变量。
希望这对您有所帮助...我认为简单的方法永远是最好的...
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
)
)
)
我正在尝试过滤关联数组,以便特定键中的某些值将进入特定变量。为了理解这一点,这是我正在尝试做的一个例子:
输入(来自数据库):
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];
}
}
你很接近..
$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);
如果您不喜欢 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 ?>
将各个数组分配给它们自己的变量。
希望这对您有所帮助...我认为简单的方法永远是最好的...
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
)
)
)