13. februar 2012 - 01:15
Der er
18 kommentarer og 1 løsning
array samle nogle id sammen?
hej eksperter Jeg sidder og forsøger at tilpasse min array som kommer ved at hente en tekstfil frem Eksempel fra array: (vælger ikke at liste alle da der er pæn mange) Array ( [0] => artikel nummer [1] => titel/emne [2] => subtitel/subemne [3] => random_nummer [4] => person navn [5] => kategorinavn [6] => subkategorinavn1 [7] => subkategorinavn2 [8] => subkategorinavn3 [9] => Udenlandske sprog ja/nej [10] => andet1 [11] => andet2 ) Forklare her (Spørgsmålet): Når den looper igennem min array ved navnet $data vil jeg gerne have at den samler 5,6,7,8 sammen. Så det kom til at se ud som denne array Array ( [0] => artikel nummer [1] => titel/emne [2] => subtitel/subemne [3] => random_nummer [4] => person navn [5] => kategorinavn/subkategorinavn1/subkategorinavn2/subkategorinavn3 [9] => Udenlandske sprog ja/nej [10] => andet1 [11] => andet2 )
Annonceindlæg fra SoftwareOne
13. februar 2012 - 02:36
#1
<ole>
Det må vel kunne gøres sådan:
$data[5] = $data[5].'/'.$data[6].'/'.$data[7].'/'.$data[8]; unset($data[6], $data[7], $data[8]); var_dump($data);
/mvh
</bole>
13. februar 2012 - 12:01
#2
Hej expnet.
Du kan løse dit problem ved at tjekke, om en værdi indeholder enten 'kategori' eller 'subkategorinavn' - i en loop selvfølgelig. Hvis værdien indeholder en af de to ovenstående værdier, skal der bygges en variabel op med denne værdi, hvorefter elementet slettes/unsettes. Det er nok nemmere blot at illustrere.
<?php $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'kategori navn', 6 => 'subkategorinavn 1', 7 => 'subkategorinavn 2', 8 => 'subkategorinavn 3', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' ); $buildValue = ''; foreach( $array as $key => $value) { if(( strpos( $value, 'kategori') !== false) || ( strpos( $value, 'subkategorinavn') !== false)) { if( $key != 8) { $buildValue .= $value.'/'; unset($array[$key]); } else { $buildValue = $buildValue.$value; $array[$key] = $buildValue; } } } $array = array_values( $array); echo '<pre>'; var_dump($array); echo '</pre>'; ?> array_values() har jeg brugt for afslutningsvis at indeksere arrayet numerisk. Jeg er åben for spørgsmål.
13. februar 2012 - 12:04
#3
Der var olebole hurtigere. :-)
13. februar 2012 - 12:59
#4
inteeeL -> har lige et spørgsmål kategori navnene og subkategorinavn er ikke altid de samme så jeg vil du skrive if pæn mange gange og det ville jeg gerne undgå
13. februar 2012 - 13:29
#5
Hvad mener du? Kan du give et eksempel på, hvordan et arraydump ville se ud?
13. februar 2012 - 13:35
#6
array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'PHP', 6 => 'Modules', 7 => 'Pay', 8 => 'Free', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' ); array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'ASP', 6 => 'Modules', 7 => 'Free', 8 => 'Pay', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' ); array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'JAVA', 6 => 'Scripts', 7 => 'docs', 8 => 'demo', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' );
13. februar 2012 - 13:44
#7
Så 4-8 skal blot trækkes sammen i hvert array. Dette skulle gøre det:
<?php $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'kategori navn', 6 => 'subkategorinavn 1', 7 => 'subkategorinavn 2', 8 => 'subkategorinavn 3', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' ); $buildValue = ''; foreach( $array as $key => $value) { if(( $key > 4) && ( $key < 9)) { if( $key != 8) { $buildValue .= $value.'/'; unset($array[$key]); } else { $buildValue .= $value; $array[$key] = $buildValue; } } } $array = array_values( $array); echo '<pre>'; var_dump($array); echo '</pre>'; ?>
13. februar 2012 - 14:07
#8
Du kan også holde det simpelt ved at benytte oleboles forslag - så slipper du får et kører en loop igennem. Olebole har før nævnt KISS-princippet
Keep it simple, Stupid! , og det bliver der gjort med hans forslag. :-)
<?php $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'random nummer', 4 => 'person navn', 5 => 'kategori navn', 6 => 'subkategorinavn 1', 7 => 'subkategorinavn 2', 8 => 'subkategorinavn 3', 9 => 'udenlandske sprog ja/nej', 10 => 'andet1', 11 => 'andet2' ); $array[5] = $array[5].'/'.$array[6].'/'.$array[7].'/'.$array[8]; unset($array[6], $array[7], $array[8]); $array = array_values( $array); echo '<pre>'; var_dump($array); echo '</pre>'; ?>
13. februar 2012 - 14:27
#9
inteeeL -> Jeg kan pt godt lide dit eksempel da jeg også undervejs har fundet ud af 3 små problemer med mine arrays måske kan du hjælpe med det ellers virker det fint det du har lavet De 3 små fejl/problemer 1. Har nogle tomme array felter - ville gerne have fjernet 2. Og når vi snakke der hvor kategorier kommer ud har jeg glemt at sige at hvis der _ skulle ikke sammle/tages med Eksempel: $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => '', 4 => 'Per Jensen', 5 => 'PHP', 6 => 'Modules', 7 => '_', 8 => 'Pay', 9 => 'udenlandske sprog ja/nej', 10 => '', 11 => 'andet2' ); Blive til :P) $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => 'Per Jensen', 4 => 'PHP/Modules/Pay', 5 => 'udenlandske sprog ja/nej', 6 => 'andet2' );
13. februar 2012 - 18:09
#10
<?php $array = array( 0 => 'artikel nummer', 1 => 'title/emne', 2 => 'subtitle/subemne', 3 => '', 4 => 'Per Jensen', 5 => 'PHP', 6 => 'Modules', 7 => '_', 8 => 'Pay', 9 => 'udenlandske sprog ja/nej', 10 => '', 11 => 'andet2' ); $buildValue = ''; foreach( $array as $key => $value) { if(($value == '') || ( $value == '_')) { unset($array[$key]); } if(( $key > 4) && ( $key < 9) && ( $value != '') && ( $value != '_')) { if( $key != 8) { $buildValue .= $value.'/'; unset($array[$key]); } else { $buildValue .= $value; $array[$key] = $buildValue; } } } $array = array_values( $array); echo '<pre>'; var_dump($array); echo '</pre>'; ?>
14. februar 2012 - 19:59
#11
Er det bare mig der ikke kan få til at virke rigtigt med min tekst fil foreach($lines as $line){ $line = trim($line,"|"); $array = explode("|",$line); $buildValue = ''; foreach( $array as $key => $value) { if(($value == '') || ( $value == '_')) { unset($array[$key]); } if(( $key > 4) && ( $key < 9) && ( $value != '') && ( $value != '_')) { if( $key != 8) { $buildValue .= $value.'/'; unset($array[$key]); } else { $buildValue .= $value; $array[$key] = $buildValue; } } } $array = array_values($array); echo '<pre>'; var_dump($array); echo '</pre>'; } }
14. februar 2012 - 20:23
#12
Hvad er det, der ikke virker? Udskrives der en fejl? Du kan også lige vise, hvordan din tekstfil ser ud, så jeg kan se, om du håndterer den rigtigt.
15. februar 2012 - 00:09
#13
12a3m51|test1|ScriptCode|56813541|Rene|PHP|Modules|Pay|_|nej|mail|tlf 12b3c55|test1|ScriptCode|56813542|Rene|PHP|Modules|Pay|Banner|nej|mail|tlf 12c3u59|test1|ScriptCode|56813543|Rene|PHP|Modules|_|MailForm|nej|mail|tlf 12d3j00|test1|ScriptCode|56813544|Rene|PHP|Modules|Free|Loader|nej|mail|tlf 12e3k44|test1|ScriptCode|56813545|Rene|PHP|Modules|Free|_|nej|mail|tlf 12f3d77|test1|ScriptCode|56813546|Rene|PHP|Modules|_|Link|nej|mail|tlf 12g3g94|test1|ScriptCode|56813547|Rene|PHP|Modules|Free|NewList|nej|mail|tlf
15. februar 2012 - 00:11
#14
Det lige som om den kun vil tage nogle af dem og lave det om array(8) { [0]=> string(7) "12a3m51" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813541" [4]=> string(4) "Rene" [5]=> string(3) "nej" [6]=> string(4) "mail" [7]=> string(3) "tlf" } array(9) { [0]=> string(7) "12b3c55" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813542" [4]=> string(4) "Rene" [5]=> string(22) "PHP/Modules/Pay/Banner" [6]=> string(3) "nej" [7]=> string(4) "mail" [8]=> string(3) "tlf" } array(9) { [0]=> string(7) "12c3u59" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813543" [4]=> string(4) "Rene" [5]=> string(20) "PHP/Modules/MailForm" [6]=> string(3) "nej" [7]=> string(4) "mail" [8]=> string(3) "tlf" } array(9) { [0]=> string(7) "12d3j00" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813544" [4]=> string(4) "Rene" [5]=> string(23) "PHP/Modules/Free/Loader" [6]=> string(3) "nej" [7]=> string(4) "mail" [8]=> string(3) "tlf" } array(8) { [0]=> string(7) "12e3k44" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813545" [4]=> string(4) "Rene" [5]=> string(3) "nej" [6]=> string(4) "mail" [7]=> string(3) "tlf" } array(9) { [0]=> string(7) "12f3d77" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813546" [4]=> string(4) "Rene" [5]=> string(16) "PHP/Modules/Link" [6]=> string(3) "nej" [7]=> string(4) "mail" [8]=> string(3) "tlf" } array(9) { [0]=> string(7) "12g3g94" [1]=> string(5) "test1" [2]=> string(10) "ScriptCode" [3]=> string(8) "56813547" [4]=> string(4) "Rene" [5]=> string(24) "PHP/Modules/Free/NewList" [6]=> string(3) "nej" [7]=> string(4) "mail" [8]=> string(3) "tlf" }
15. februar 2012 - 09:17
#15
udmiddelbart lader det til at det virker det her if($array[11] > 0){ $array_7 = (empty($array[9]) || $array[9] == "_")? '' : str_replace("/", "-", $array[9]); $array_6 = (empty($array[8]) || $array[8] == "_")? '' : str_replace("/", "-", $array[8]); $array_5 = (empty($array[7]) || $array[7] == "_")? '' : str_replace("/", "-", $array[7]); $array_4 = (empty($array[6]) || $array[6] == "_")? '' : str_replace("/", "-", $array[6]); $array_3 = (empty($array[5]) || $array[5] == "_")? 'Andet' : str_replace("/", "-", $array[5]); $array_7 = (empty($array_7))? '' : '/'.$array_7; $array_6 = (empty($array_6))? '' : '/'.$array_6; $array_5 = (empty($array_5))? '' : '/'.$array_5; $array_4 = (empty($array_4))? '' : '/'.$array_4; $array_3 = (empty($array_3))? '' : $array_3; $array_1 = $array[0]; $array_2 = $array[1]; $array_8 = $array[10]; $array_9 = $array[11]; $arrayData[] = array( $array_1, $array_2, $array_3.$array_4.$array_5.$array_6.$array_7, $array_8, $array_9 );
15. februar 2012 - 12:59
#16
En lidt forenklet måde:
<?php $file = "test.txt"; $openFile = fopen( $file, 'r'); $getContent = fread( $openFile, filesize( $file)); $explodeLines = explode("\n", $getContent); foreach( $explodeLines as $line) { $line = trim( $line, "|"); $array = explode("|", $line); $buildValue = ''; foreach( $array as $key => $value) { $eraseElement = (($value == '') || ( $value == '_') ? true : false); if(( $key > 4) && ( $key < 9)) { if( $key != 8) { $buildValue .= ( !$eraseElement ? $value.'/' : ''); unset($array[$key]); } else { $buildValue .= ( !$eraseElement ? $value : ''); if( end( str_split( $buildValue)) == '/') { $buildValue = substr( $buildValue, 0, sizeof( str_split( $buildValue))-1); } $array[$key] = $buildValue; if( empty( $array[$key])) { unset($array[$key]); } } } } $array = array_values( $array); echo '<pre>'; var_dump($array); echo '</pre>'; } fclose( $openFile); ?> Det skulle gøre det for dig :-)
15. februar 2012 - 19:06
#17
Grunden til at det ikke virkede med den anden kode var, at vi unsat/fjernede elementet, hvis det var tomt eller indeholdt underscore (_). Problemet er, at der, hvor $array[8] er tom eller lig med "_", når vi aldrig ned til den del, hvor den egentlige sammentrækning af elementerne sker. Jeg har i stedet undladt at fjerne elementet og i stedet valideret med $eraseElement, som returnerer, om elementet er tomt/indeholder "_" eller ej. Jeg håber ovenstående er til at forstå, ellers må du spørge. Hvis du vælger at bruge din egen kode, skal du blot ignorere denne kommentar.
03. marts 2012 - 11:26
#18
inteeeL -> ligger du ikke et svar du har være til stor hjælp, så stort tak her fra
04. marts 2012 - 17:57
#19
Det var så lidt, svar :-)
Vi tilbyder markedets bedste kurser inden for webudvikling