在删除特定行时重写 PHP 数组
Rewrite PHP array on deleting specific row
我有一个挑战,要通过用一个值分组来重写一个数组,并且只保留每组的最大值
在线示例http://sandbox.onlinephpfunctions.com/code/231f73be712de42964c1daf96d05789391b8f5ee
这里是所需的结果(按 APP 列分组并仅保留最高的 IdProject)
预期输出:
array (size=5)
0 =>
array (size=4)
0 => string '16129' (length=5)
1 => string '14950' (length=5)
2 => string '14950_APP1' (length=10)
3 => string 'TEST 01' (length=7)
1 =>
array (size=4)
0 => string '16200' (length=5)
1 => string '15600' (length=5)
2 => string '15600_APP2' (length=10)
3 => string 'TEST 02' (length=7)
2 =>
array (size=4)
0 => string '18000' (length=5)
1 => string '15700' (length=5)
2 => string '15700_APP3' (length=10)
3 => string 'TEST 03' (length=7)
你可以像这里显示的那样使用它并修改它PHP.net array_unique
<?php
$array = array (
0 => array (
0 => 'Project_id',
1 => 'Id_autre',
2 => 'App',
3 => 'App_lib',
),
1 => array (
0 => '15685',
1 => '14950',
2 => '14950_APP1',
3 => 'TEST 01',
),
2 => array (
0 => '16129',
1 => '14950',
2 => '14950_APP1',
3 => 'TEST 01',
),
3 => array (
0 => '16100',
1 => '15600',
2 => '15600_APP2',
3 => 'TEST 02',
),
4 => array (
0 => '16200',
1 => '15600',
2 => '15600_APP2',
3 => 'TEST 02',
),
5 => array (
0 => '18000',
1 => '15700',
2 => '15700_APP3',
3 => 'TEST 03',
),
);
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
// Do a check if the value is_numeric
if(is_numeric($val[0])){
// Search array in $key_array if doenst exists add
if (!array_search($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
} else {
// Search array and if it does exists replace the array.
$key_array[array_search($val[$key], $key_array)] = $val[$key];
$temp_array[array_search($val[$key], $key_array)] = $val;
}
}
$i++;
}
return $temp_array;
}
$details = unique_multidim_array($array,3);
print_r($details);
我认为您要求只为每个重复的 App
代码匹配保留最大的 project_id
行。这将做到这一点。
<?php
$array = array (
array ( 'Project_id', 'Id_autre', 'App', 'App_lib'),
array ( '15685', '14950', '14950_APP1', 'TEST 01'),
array ( '16129', '14950', '14950_APP1', 'TEST 01'),
// added extra 15600_APP2 with largest Project_id first in the array
array ( '16300', '15600', '15600_APP2', 'TEST 02'),
array ( '16100', '15600', '15600_APP2', 'TEST 02'),
array ( '16200', '15600', '15600_APP2', 'TEST 02'),
array ( '18000', '15700', '15700_APP3', 'TEST 03')
);
function sortOnAppandProjectId($a,$b)
{
return $a[2] > $b[2] ||
($a[2] == $b[2] && $a[0] > $b[0]);
}
// lose the Column name occurance
unset($array[0]);
// sort the array
usort($array, "sortOnAppandProjectId");
foreach( $array as $key => $value ){
if ( $key < count($array)-1 &&
$value[2] == $array[$key+1][2] &&
$value[0] < $array[$key+1][0]) {
continue;
} // got another one loose this line
$arr[] = $value;
}
echo 'RESULT'.PHP_EOL;
print_r($arr);
结果
Array
(
[0] => Array
(
[0] => 16129
[1] => 14950
[2] => 14950_APP1
[3] => TEST 01
)
[1] => Array
(
[0] => 16300
[1] => 15600
[2] => 15600_APP2
[3] => TEST 02
)
[2] => Array
(
[0] => 18000
[1] => 15700
[2] => 15700_APP3
[3] => TEST 03
)
)
http://sandbox.onlinephpfunctions.com/code/9ce5178a0b3cd2822cb7e8f8d30e39d7c3db6701
我有一个挑战,要通过用一个值分组来重写一个数组,并且只保留每组的最大值
在线示例http://sandbox.onlinephpfunctions.com/code/231f73be712de42964c1daf96d05789391b8f5ee
这里是所需的结果(按 APP 列分组并仅保留最高的 IdProject)
预期输出:
array (size=5)
0 =>
array (size=4)
0 => string '16129' (length=5)
1 => string '14950' (length=5)
2 => string '14950_APP1' (length=10)
3 => string 'TEST 01' (length=7)
1 =>
array (size=4)
0 => string '16200' (length=5)
1 => string '15600' (length=5)
2 => string '15600_APP2' (length=10)
3 => string 'TEST 02' (length=7)
2 =>
array (size=4)
0 => string '18000' (length=5)
1 => string '15700' (length=5)
2 => string '15700_APP3' (length=10)
3 => string 'TEST 03' (length=7)
你可以像这里显示的那样使用它并修改它PHP.net array_unique
<?php
$array = array (
0 => array (
0 => 'Project_id',
1 => 'Id_autre',
2 => 'App',
3 => 'App_lib',
),
1 => array (
0 => '15685',
1 => '14950',
2 => '14950_APP1',
3 => 'TEST 01',
),
2 => array (
0 => '16129',
1 => '14950',
2 => '14950_APP1',
3 => 'TEST 01',
),
3 => array (
0 => '16100',
1 => '15600',
2 => '15600_APP2',
3 => 'TEST 02',
),
4 => array (
0 => '16200',
1 => '15600',
2 => '15600_APP2',
3 => 'TEST 02',
),
5 => array (
0 => '18000',
1 => '15700',
2 => '15700_APP3',
3 => 'TEST 03',
),
);
function unique_multidim_array($array, $key) {
$temp_array = array();
$i = 0;
$key_array = array();
foreach($array as $val) {
// Do a check if the value is_numeric
if(is_numeric($val[0])){
// Search array in $key_array if doenst exists add
if (!array_search($val[$key], $key_array)) {
$key_array[$i] = $val[$key];
$temp_array[$i] = $val;
} else {
// Search array and if it does exists replace the array.
$key_array[array_search($val[$key], $key_array)] = $val[$key];
$temp_array[array_search($val[$key], $key_array)] = $val;
}
}
$i++;
}
return $temp_array;
}
$details = unique_multidim_array($array,3);
print_r($details);
我认为您要求只为每个重复的 App
代码匹配保留最大的 project_id
行。这将做到这一点。
<?php
$array = array (
array ( 'Project_id', 'Id_autre', 'App', 'App_lib'),
array ( '15685', '14950', '14950_APP1', 'TEST 01'),
array ( '16129', '14950', '14950_APP1', 'TEST 01'),
// added extra 15600_APP2 with largest Project_id first in the array
array ( '16300', '15600', '15600_APP2', 'TEST 02'),
array ( '16100', '15600', '15600_APP2', 'TEST 02'),
array ( '16200', '15600', '15600_APP2', 'TEST 02'),
array ( '18000', '15700', '15700_APP3', 'TEST 03')
);
function sortOnAppandProjectId($a,$b)
{
return $a[2] > $b[2] ||
($a[2] == $b[2] && $a[0] > $b[0]);
}
// lose the Column name occurance
unset($array[0]);
// sort the array
usort($array, "sortOnAppandProjectId");
foreach( $array as $key => $value ){
if ( $key < count($array)-1 &&
$value[2] == $array[$key+1][2] &&
$value[0] < $array[$key+1][0]) {
continue;
} // got another one loose this line
$arr[] = $value;
}
echo 'RESULT'.PHP_EOL;
print_r($arr);
结果
Array
(
[0] => Array
(
[0] => 16129
[1] => 14950
[2] => 14950_APP1
[3] => TEST 01
)
[1] => Array
(
[0] => 16300
[1] => 15600
[2] => 15600_APP2
[3] => TEST 02
)
[2] => Array
(
[0] => 18000
[1] => 15700
[2] => 15700_APP3
[3] => TEST 03
)
)
http://sandbox.onlinephpfunctions.com/code/9ce5178a0b3cd2822cb7e8f8d30e39d7c3db6701