Php 如何从多维数组中删除不必要的行?
我有这样的指纹记录Php 如何从多维数组中删除不必要的行?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有这样的指纹记录 "OUR COMPANY";"100";"100";07/25/2017 5:02:57 PM;"Check Out";"1";"";0;"Fingerpint";"" "OUR COMPANY";"102";"102";07/25/2017 7:45:53 AM;"Check In";"1";"";0;"Fingerpint";"" "OUR COMPANY";"102";"102";07/25/2017 7:45:54 AM;"Check In";"1";"";0;"Fi
"OUR COMPANY";"100";"100";07/25/2017 5:02:57 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 7:45:53 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 7:45:54 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 6:01:34 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 6:01:35 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"104";"104";07/25/2017 8:00:06 AM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"104";"104";07/25/2017 5:35:19 PM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"105";"105";07/25/2017 8:47:37 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"108";"108";07/25/2017 8:45:42 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"108";"108";07/25/2017 6:04:00 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"11";"11";07/25/2017 8:57:34 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"11";"11";07/25/2017 5:12:06 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"112";"112";07/25/2017 8:43:56 AM;"Check In";"1";"";0;"Password";""
"OUR COMPANY";"112";"112";07/25/2017 5:39:26 PM;"Check Out";"1";"";0;"Password";""
"OUR COMPANY";"112";"112";07/25/2017 5:41:17 PM;"Check Out";"1";"";0;"Password";""
格式:
Array
(
[0] => Array
(
[0] => "OUR COMPANY"
[1] => "100"
[2] => "100"
[3] => 07/25/2017 5:02:57 PM
[4] => "Check Out"
[5] => "1"
[6] => ""
[7] => 0
[8] => "Fingerpint"
[9] => ""
)
[1] => Array
(
[0] => "OUR COMPANY"
[1] => "102"
[2] => "102"
[3] => 07/25/2017 7:45:53 AM
[4] => "Check In"
[5] => "1"
[6] => ""
[7] => 0
[8] => "Fingerpint"
[9] => ""
)
[2] => Array
(
[0] => "OUR COMPANY"
[1] => "102"
[2] => "102"
[3] => 07/25/2017 7:45:54 AM
[4] => "Check In"
[5] => "1"
[6] => ""
[7] => 0
[8] => "Fingerpint"
[9] => ""
)
...
)
我只想得到每次入住和退房的第一条记录。该记录包含多个条目,每个ID(如ID 102)有2个签入和2个签出。我只想获取签入的第一条记录和签出的第一条记录。这是我的方法
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
if ($c == 1 || $c == 2 || $c == 3 || $c == 4) {
if($d != 0){
$dtary[$d][$c] = $data[$c] ;
}
}
if ($c == 9 ) {
$d++ ;
}
}
}
while(($data=fgetcsv($handle,1000,;”))!==FALSE){
$num=计数($data);
对于($c=0;$c<$num;$c++){
如果($c==1 | |$c==2 | |$c==3 | |$c==4){
如果($d!=0){
$dtary[$d][$c]=$data[$c];
}
}
如果($c==9){
$d++;
}
}
}
如何设置条件?您需要
循环
数组并构建
新的数组
,如下所示
1st:在循环中存储每个唯一id的签入的第一个条目
,然后忽略该id的所有其他签入条目
2nd:在循环中存储每个唯一id的签出的的最后一个条目
,因此您只需覆盖每个条目<代码>如果($val['4']==“签出”){..}。
PHP:
<?php
$data = Array(
"0" => Array
(
"0" => "OUR COMPANY",
"1" => "100",
"2" => "100",
"3" => "07/25/2017 5:02:57 PM",
"4" => "Check Out",
"5" => "1",
"6" => "",
"7" => 0,
"8" => "Fingerpint",
"9" => ""
),
"1" => Array
(
"0" => "OUR COMPANY",
"1" => "102",
"2" => "102",
"3" => "07/25/2017 7:45:53 AM",
"4" => "Check In",
"5" => "1",
"6" => "",
"7" => 0,
"8" => "Fingerpint",
"9" => ""
),
"2" => Array
(
"0" => "OUR COMPANY",
"1" => "102",
"2" => "102",
"3" => "07/25/2017 7:45:54 AM",
"4" => "Check In",
"5" => "1",
"6" => "",
"7" => 0,
"8" => "Fingerpint",
"9" => ""
),
"3" => Array
(
"0" => "OUR COMPANY",
"1" => "100",
"2" => "100",
"3" => "07/25/2017 6:02:57 PM",
"4" => "Check In",
"5" => "1",
"6" => "",
"7" => 0,
"8" => "Fingerpint",
"9" => ""
),
"4" => Array
(
"0" => "OUR COMPANY",
"1" => "102",
"2" => "102",
"3" => "07/25/2017 8:45:54 AM",
"4" => "Check Out",
"5" => "1",
"6" => "",
"7" => 0,
"8" => "Fingerpint",
"9" => ""
),
);
$final_array=array();
foreach($data as $key=>$val)
{
if(!isset($final_array[$val['1']]['check_in']) && $val['4']=="Check In"){
$final_array[$val['1']]['check_in']=$val[3];
}
if($val['4']=="Check Out"){
$final_array[$val['1']]['check_out']=$val[3];
}
}
echo "<pre>";
print_r($final_array);
?>
"OUR COMPANY";"100";"100";07/25/2017 5:02:57 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 7:45:53 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"102";"102";07/25/2017 6:01:34 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"104";"104";07/25/2017 8:00:06 AM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"104";"104";07/25/2017 5:35:19 PM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"105";"105";07/25/2017 8:47:37 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"108";"108";07/25/2017 8:45:42 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"108";"108";07/25/2017 6:04:00 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"11";"11";07/25/2017 8:57:34 AM;"Check In";"1";"";0;"Fingerpint";""
"OUR COMPANY";"11";"11";07/25/2017 5:12:06 PM;"Check Out";"1";"";0;"Fingerpint";""
"OUR COMPANY";"112";"112";07/25/2017 8:43:56 AM;"Check In";"1";"";0;"Password";""
"OUR COMPANY";"112";"112";07/25/2017 5:39:26 PM;"Check Out";"1";"";0;"Password";""
这是你期望的结果吗
<?php
$myArray = array();
$myArray[] = array("OUR COMPANY","100","100","07/25/2017 5:02:57 PM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","102","102","07/25/2017 7:45:53 AM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","102","102","07/25/2017 7:45:54 AM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","102","102","07/25/2017 6:01:34 PM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","102","102","07/25/2017 6:01:35 PM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","104","104","07/25/2017 8:00:06 AM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","104","104","07/25/2017 5:35:19 PM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","105","105","07/25/2017 8:47:37 AM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","108","108","07/25/2017 8:45:42 AM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","108","108","07/25/2017 6:04:00 PM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","11","11","07/25/2017 8:57:34 AM","Check In","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","11","11","07/25/2017 5:12:06 PM","Check Out","1","",0,"Fingerpint","");
$myArray[] = array("OUR COMPANY","112","112","07/25/2017 8:43:56 AM","Check In","1","",0,"Password","");
$myArray[] = array("OUR COMPANY","112","112","07/25/2017 5:39:26 PM","Check Out","1","",0,"Password","");
$myArray[] = array("OUR COMPANY","112","112","07/25/2017 5:41:17 PM","Check Out","1","",0,"Password","");
/**
* Compare two arrays and return true if intersected counts are the same.
*/
function in_array_intersect ($target, $haystack) {
foreach ($haystack as $item) {
if ( (count(array_intersect(array($item[1], $item[4]), $target)) == count($target))) {
return true;
}
}
return false;
}
// Define a new array to hold the matched records
$resultArray = array();
foreach ($myArray as $subArray) {
// Create a new array with only two columns, ID and CheckIn/Out
$target = array($subArray[1], $subArray[4]);
if (!in_array_intersect($target, $resultArray)){
// Add $subArray to $resultArray if no array is found in $resultArray by matching the columns constraint
array_push($resultArray, $subArray);
}
}
echo '<pre>';
print_r($resultArray);
echo '</pre>';
?>
你应该试试
如果约束仅为ID和“签入/签出”
,而不考虑日期时间
或每天唯一的签入/签出
,则签出:
Array
(
[0] => Array
(
[0] => OUR COMPANY
[1] => 100
[2] => 100
[3] => 07/25/2017 5:02:57 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[1] => Array
(
[0] => OUR COMPANY
[1] => 102
[2] => 102
[3] => 07/25/2017 7:45:53 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[2] => Array
(
[0] => OUR COMPANY
[1] => 102
[2] => 102
[3] => 07/25/2017 6:01:34 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[3] => Array
(
[0] => OUR COMPANY
[1] => 104
[2] => 104
[3] => 07/25/2017 8:00:06 AM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[4] => Array
(
[0] => OUR COMPANY
[1] => 104
[2] => 104
[3] => 07/25/2017 5:35:19 PM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[5] => Array
(
[0] => OUR COMPANY
[1] => 105
[2] => 105
[3] => 07/25/2017 8:47:37 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[6] => Array
(
[0] => OUR COMPANY
[1] => 108
[2] => 108
[3] => 07/25/2017 8:45:42 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[7] => Array
(
[0] => OUR COMPANY
[1] => 108
[2] => 108
[3] => 07/25/2017 6:04:00 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[8] => Array
(
[0] => OUR COMPANY
[1] => 11
[2] => 11
[3] => 07/25/2017 8:57:34 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[9] => Array
(
[0] => OUR COMPANY
[1] => 11
[2] => 11
[3] => 07/25/2017 5:12:06 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[10] => Array
(
[0] => OUR COMPANY
[1] => 112
[2] => 112
[3] => 07/25/2017 8:43:56 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Password
[9] =>
)
[11] => Array
(
[0] => OUR COMPANY
[1] => 112
[2] => 112
[3] => 07/25/2017 5:39:26 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Password
[9] =>
)
)
请格式化您的阵列,然后发布您的尝试,让我们看看您已经尝试了什么。我认为它应该是签入的第一个记录和签出的最后一个记录。不是吗?我不能在外面格式化。它是由指纹机生成的。我需要在php脚本中格式化。你说它是多维数组。这就是为什么我要求你格式化数组。谢谢兄弟,这非常有效。你能给我解释一些代码,以便我将来可以修改或修改。谢谢。答案已经更新并添加了一些注释。
Array
(
[0] => Array
(
[0] => OUR COMPANY
[1] => 100
[2] => 100
[3] => 07/25/2017 5:02:57 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[1] => Array
(
[0] => OUR COMPANY
[1] => 102
[2] => 102
[3] => 07/25/2017 7:45:53 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[2] => Array
(
[0] => OUR COMPANY
[1] => 102
[2] => 102
[3] => 07/25/2017 6:01:34 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[3] => Array
(
[0] => OUR COMPANY
[1] => 104
[2] => 104
[3] => 07/25/2017 8:00:06 AM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[4] => Array
(
[0] => OUR COMPANY
[1] => 104
[2] => 104
[3] => 07/25/2017 5:35:19 PM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[5] => Array
(
[0] => OUR COMPANY
[1] => 105
[2] => 105
[3] => 07/25/2017 8:47:37 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[6] => Array
(
[0] => OUR COMPANY
[1] => 108
[2] => 108
[3] => 07/25/2017 8:45:42 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[7] => Array
(
[0] => OUR COMPANY
[1] => 108
[2] => 108
[3] => 07/25/2017 6:04:00 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[8] => Array
(
[0] => OUR COMPANY
[1] => 11
[2] => 11
[3] => 07/25/2017 8:57:34 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[9] => Array
(
[0] => OUR COMPANY
[1] => 11
[2] => 11
[3] => 07/25/2017 5:12:06 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Fingerpint
[9] =>
)
[10] => Array
(
[0] => OUR COMPANY
[1] => 112
[2] => 112
[3] => 07/25/2017 8:43:56 AM
[4] => Check In
[5] => 1
[6] =>
[7] => 0
[8] => Password
[9] =>
)
[11] => Array
(
[0] => OUR COMPANY
[1] => 112
[2] => 112
[3] => 07/25/2017 5:39:26 PM
[4] => Check Out
[5] => 1
[6] =>
[7] => 0
[8] => Password
[9] =>
)
)