/ / Creare cartelle basate su hashtag pubblicati PHP - php

Creare cartelle basate su hashtag pubblicati PHP - php

Quindi questa è la prima volta che invii una domandaquesto sito e come programmatore mi sono vergognato di non aver creato un account prima, questo sito mi ha fatto passare un sacco di soldi, comunque ne ho abbastanza, ho bisogno di aiuto.

Sto creando un sistema in cui gli utenti possono postarepossedere piccoli status, aggiornare il loro stato, condividere, ecc. Ho bisogno di aiuto nella creazione di cartelle per #hashtags basate sull'hashtag che l'utente ha nel suo stato postato.

Quindi un esempio potrebbe essere: "Ciao mondo #firstpost #helloworld", il codice dovrebbe escludere tutto in quella frase tranne che per qualsiasi e tutti gli hashtag, e quindi creerebbe le cartelle per tutti gli hashtag che sono negli utenti post, in questo caso sta andando a creare le cartelle primo post e Ciao mondo (se non esistono già).

Posso creare le cartelle usando una versione modificata di questo o almeno qualcosa di migliore / simile / correlato?

$foldername = $_POST["status_posting"];
mkdir("../hashtag/" . $foldername, 0755);
for ($i = 0; $i < 1; $i++) {
mkdir("../users/" . $foldername, 0755);
}

Grazie per il vostro aiuto ragazzi in anticipo.

risposte:

0 per risposta № 1

Puoi usare un'espressione regolare per catturare gli hashtag, quindi usare mkdir() per creare le directory. Puoi usare file_exists() per verificare se un file esiste (o no !).

Vorrei usare la seguente espressione: #(S{1,}). Questa espressione cerca a #, quindi inizia a catturare qualsiasi carattere non di spazio bianco (/S), da una volta a infinite volte ({1,}).

<?php
$input = "Hello world #firstpost #helloworld";

preg_match_all("/#(S{1,})/", $input, $matches);

foreach($matches[1] as $match){
if (!file_exists("../hashtag/" . $match)) {
mkdir("../hashtag/" . $match, 0755, true);
}
}

0 per risposta № 2

I "D php explode() il messaggio, controlla ogni elemento se contiene un #, se è così mkdir il nome dell'oggetto s meno il #. Forse non è il modo più efficace per farlo.

$foldername = explode(" ", $_POST["status_posting"]);
foreach($foldername as $string){
if(strpos($string, "#") !== FALSE){
//Make dir!
mkdir("../hashtag/" . ltrim($string, "#"), 0755, true);
}
}

Il true alla fine di mkdir consente la creazione di percorsi di file ricorsivi. Ad esempio, se la cartella hashtag non è stata ancora creata, verrà creata anche quella.

Dopo aver fatto qualche ricerca, dato che "#" può essere trovato senza usare regex, è molto più efficiente da usare strpos() and explode(). preg_match() vs strpos() la velocità è mostrata sotto.

no. strings  1        2       3         10      100     1000    10000
strpos()     0.01 ms  0.02 ms 0.04 ms   0.2 ms  0.9 ms  2.6 ms  25.6 ms
preg_match() 0.2 ms   0.2 ms  0.3 ms    0.47 ms 0.95 ms 7.4 ms  72.2 ms

Anche se devi calcolare il tempo di esplosione (),il forum php afferma che explode () dovrebbe essere usato quando non è richiesta la regex power, per ragioni che possiamo vedere sopra. Sarei interessato a vedere il codice delle due risposte messo a confronto in quanto sarebbe molto interessante sapere con certezza.