У меня проблема с массивом ниже, поскольку он не отображает способ, которым я хочу;
Array ( [0] => Array ( [name] => Accounts.csv [time] => 1396518749 [size] => 4685 [hash] => 4ddde7286adcbf06472a7d8f9987bf88 ) [1] => Array ( [name] => Book1.xlsx [time] => 1396436339 [size] => 9776 [hash] => 96f219be0397b240777969f8b3cbb711 ) [2] => Array ( [name] => Documents/ [time] => 1396510415 [size] => 0 [hash] => d41d8cd98f00b204e9800998ecf8427e ) [3] => Array ( [name] => Documents/AdbWinApi.dll [time] => 1396847400 [size] => 96256 [hash] => 47a6ee3f186b2c2f5057028906bac0c6 ) [4] => Array ( [name] => ken header.pdf [time] => 1396436334 [size] => 110772 [hash] => fe64e53a2237c7b84b08981ed2c0447a ) [5] => Array ( [name] => sp42471.exe [time] => 1396527931 [size] => 128609088 [hash] => 1687428c91011b0c028f91d16593c5e7 )
)
Я хотел бы удалить некоторые повторяющиеся элементы и реорганизовать вывод, как показано ниже;
Array ( [0] => Array ( [name] => Accounts.csv [time] => 1396518749 [size] => 4685 [hash] => 4ddde7286adcbf06472a7d8f9987bf88 ) [1] => Array ( [name] => Book1.xlsx [time] => 1396436339 [size] => 9776 [hash] => 96f219be0397b240777969f8b3cbb711 ) [2] => Array ( [name] => Documents [time] => 1396510415 [size] => 0 [hash] => d41d8cd98f00b204e9800998ecf8427e ) [3] => Array ( [name] => ken header.pdf [time] => 1396436334 [size] => 110772 [hash] => fe64e53a2237c7b84b08981ed2c0447a ) [4] => Array ( [name] => sp42471.exe [time] => 1396527931 [size] => 128609088 [hash] => 1687428c91011b0c028f91d16593c5e7 )
)
Я использую следующий код для извлечения массива.
private function listFiles($bucket = null , $prefix = null) { $ls = S3::getBucket($bucket, $prefix); if(!empty($ls)) { foreach($ls as $l) { //print_r($ls); $fname = str_replace($prefix,"",$l['name']); $ftime = $l['time']; $fsize = $l['size']; $fhash = $l['hash']; if(!empty($fname)) { $rv[] = array('name' => $fname, 'time' => $ftime, 'size' => $fsize, 'hash' => $fhash); //$rv[] = $fname; } } } if(!empty($rv)) { return $rv; } }
Какую часть я должен изменить, чтобы получить результаты выше. NB: Я все еще новичок в массиве.
Вы можете действовать следующим образом.
$newarr=array(); foreach($yourarr as $k=>&$arr) { $v=$arr['name']; if(strpos($v,'/')!==false) { $v=explode('/',$v); if(isset($v[1]) && strlen($v[1])>0){}else{$arr['name']=$v[0];$newarr[]=$arr;} } else { $newarr[]=$arr;} } print_r($newarr);
OUTPUT :
Array ( [0] => Array ( [name] => Accounts.csv [time] => 1396518749 [size] => 4685 [hash] => 4ddde7286adcbf06472a7d8f9987bf88 ) [1] => Array ( [name] => Book1.xlsx [time] => 1396436339 [size] => 9776 [hash] => 96f219be0397b240777969f8b3cbb711 ) [2] => Array ( [name] => Documents [time] => 1396510415 [size] => 0 [hash] => d41d8cd98f00b204e9800998ecf8427e ) [3] => Array ( [name] => ken header.pdf [time] => 1396436334 [size] => 110772 [hash] => fe64e53a2237c7b84b08981ed2c0447a ) [4] => Array ( [name] => sp42471.exe [time] => 1396527931 [size] => 128609088 [hash] => 1687428c91011b0c028f91d16593c5e7 ) )
Рабочая демонстрация
Поскольку вы не указали, что именно хотите отфильтровать, я предполагаю, что дубликаты – это что-то в подпапке.
Итак, вот возможный способ отфильтровать их:
private function listFiles($bucket = null , $prefix = null) { $ls = S3::getBucket($bucket, $prefix); if(!empty($ls)) { $rv = array(); foreach($ls as $l) { //print_r($ls); $fname = str_replace($prefix,"",$l['name']); $ftime = $l['time']; $fsize = $l['size']; $fhash = $l['hash']; $fname = trim($fname, "/"); if(!empty($fname)) { $dup = false; foreach($rv as $val) { $array = explode("/", $val['name']); if ($array[0] == $fname) { $dup = true; break; } } if (!$dup) { $rv[] = array('name' => $fname, 'time' => $ftime, 'size' => $fsize, 'hash' => $fhash); //$rv[] = $fname; } } } } if(!empty($rv)) { return $rv; } }