{"id":16161,"date":"2025-05-02T08:26:05","date_gmt":"2025-05-02T06:26:05","guid":{"rendered":"https:\/\/www.beseit.net\/?p=16161"},"modified":"2025-05-03T16:36:10","modified_gmt":"2025-05-03T14:36:10","slug":"array-indexat","status":"publish","type":"post","link":"http:\/\/www.beseit.net\/?p=16161","title":{"rendered":"Array indexat ($linies = file($fitxer)"},"content":{"rendered":"\n<p>Per comptar el nombre de l\u00ednies d&#8217;un array en PHP, pots utilitzar la funci\u00f3 <code>count()<\/code>. Aix\u00ed, si has llegit el fitxer en un array amb <code>file($fitxer)<\/code>, pots obtenir el nombre de l\u00ednies amb:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$nombre_linies = count($array_preguntes);\necho \"El fitxer t\u00e9 $nombre_linies l\u00ednies.\";<\/code><\/pre>\n\n\n\n<p>Aquesta funci\u00f3 compta el nombre d&#8217;elements dins l&#8217;array <code>$array_preguntes<\/code>, que corresponen a les l\u00ednies del fitxer llegit. Si tens algun altre dubte sobre el maneig de fitxers en PHP, aqu\u00ed estic per ajudar-te! ?<\/p>\n\n\n\n<p>Pots utilitzar la funci\u00f3 <code>rand()<\/code> de PHP per generar un n\u00famero aleatori entre 0 i <code>$nombre_linies - 1<\/code>. Aqu\u00ed tens la funci\u00f3 que ho fa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function aleatoria($nombre_linies) {\n    return rand(0, $nombre_linies - 1);\n}\n\n$num_linia = aleatoria($nombre_linies);\necho \"N\u00famero de l\u00ednia seleccionat: $num_linia\";<\/code><\/pre>\n\n\n\n<p>Aquesta funci\u00f3 assegura que el valor generat estigui dins del rang correcte (entre 0 i <code>$nombre_linies - 1<\/code>). Aix\u00f2 \u00e9s \u00fatil si <code>$nombre_linies<\/code> representa el nombre total de l\u00ednies d&#8217;un fitxer o d&#8217;un array.<\/p>\n\n\n\n<p>Si vols una alternativa m\u00e9s moderna, pots usar <code>random_int()<\/code> per millorar la seguretat i la generaci\u00f3 de nombres aleatoris:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function aleatoria($nombre_linies) {\n    return random_int(0, $nombre_linies - 1);\n}<\/code><\/pre>\n\n\n\n<p>T&#8217;agradaria que l&#8217;integr\u00e9ssim amb una altra part del teu codi? ?<\/p>\n\n\n\n<p>S\u00ed, exactament! La funci\u00f3 <code>count($array_preguntes)<\/code> retorna el nombre total d&#8217;elements dins de l&#8217;array, i en aquest cas, com <code>file($fitxer)<\/code> llegeix cada l\u00ednia del fitxer com un element de l&#8217;array, <code>count($array_preguntes)<\/code> et donar\u00e0 el nombre de l\u00ednies del fitxer.<\/p>\n\n\n\n<p>Si necessites obtenir un subconjunt espec\u00edfic de l\u00ednies o processar-les d&#8217;una manera concreta, pots rec\u00f3rrer l&#8217;array amb un <code>foreach<\/code> o utilitzar <code>array_slice()<\/code> per seleccionar una part. Vols que t&#8217;ajudi a estructurar algun altre tipus de processament? ?<\/p>\n\n\n\n<p>S\u00ed! Pots carregar una pregunta aleat\u00f2ria de l&#8217;array mitjan\u00e7ant la funci\u00f3 <code>rand()<\/code> o <code>random_int()<\/code>. Aqu\u00ed tens el codi per seleccionar una l\u00ednia aleat\u00f2ria i extreure la pregunta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function obtenirPreguntaAleatoria($array_preguntes) {\n    $nombre_linies = count($array_preguntes);\n    if ($nombre_linies &gt; 0) {\n        \/\/ Selecciona un n\u00famero aleatori entre 0 i nombre de l\u00ednies - 1\n        $num_linia = random_int(0, $nombre_linies - 1);\n\n        \/\/ Separa pregunta i resposta (assumint que la separaci\u00f3 \u00e9s \" &gt; \")\n        $parts = explode(' &gt; ', trim($array_preguntes&#91;$num_linia]));\n\n        \/\/ Retorna nom\u00e9s la pregunta\n        return $parts&#91;0] ?? \"Pregunta no trobada\";\n    }\n\n    return \"No hi ha preguntes disponibles.\";\n}\n\n\/\/ Exemple d'\u00fas\n$array_preguntes = file($fitxer); \/\/ Llegeix el fitxer i carrega les l\u00ednies en un array\n$pregunta_aleatoria = obtenirPreguntaAleatoria($array_preguntes);\necho \"Pregunta aleat\u00f2ria: \" . $pregunta_aleatoria;<\/code><\/pre>\n\n\n\n<p>Aquest codi:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Calcula el nombre de l\u00ednies de l&#8217;array.<\/li>\n\n\n\n<li>Selecciona una l\u00ednia aleat\u00f2ria.<\/li>\n\n\n\n<li>Separa la pregunta i la resposta mitjan\u00e7ant <code>explode(' > ')<\/code>.<\/li>\n\n\n\n<li>Retorna la pregunta aleat\u00f2ria.<\/li>\n<\/ol>\n\n\n\n<p>Si la separaci\u00f3 entre pregunta i resposta \u00e9s diferent (<code>\/<\/code>, <code>:<\/code> o un altre car\u00e0cter), nom\u00e9s has de modificar el delimitador dins <code>explode()<\/code>.<\/p>\n\n\n\n<p>Sembla que hi ha un petit error en el retorn de la funci\u00f3 <code>obtenirPreguntaAleatoria()<\/code>. Quan vols retornar tant la pregunta com la resposta, haur\u00edem d&#8217;utilitzar un array en lloc d&#8217;intentar retornar dues variables separades amb una coma. Tamb\u00e9 hi ha un petit problema amb <code>$resposta=<\/code>, que falta completar. Aqu\u00ed tens el codi corregit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function obtenirPreguntaAleatoria($array_preguntes) {\n    $nombre_linies = count($array_preguntes);\n\n    if ($nombre_linies &gt; 0) {\n        \/\/ Selecciona un n\u00famero aleatori entre 0 i nombre de l\u00ednies - 1\n        $num_linia = random_int(0, $nombre_linies - 1);\n\n        \/\/ Separa pregunta i resposta (assumint que la separaci\u00f3 \u00e9s \" &gt; \")\n        $parts = explode(' &gt; ', trim($array_preguntes&#91;$num_linia]));\n\n        \/\/ Retorna la pregunta i la resposta com un array\n        return &#91;\n            'pregunta' =&gt; $parts&#91;0] ?? \"Pregunta no trobada\",\n            'resposta' =&gt; $parts&#91;1] ?? \"Resposta no trobada\"\n        ];\n    }\n\n    return &#91;\n        'pregunta' =&gt; \"No hi ha preguntes disponibles.\",\n        'resposta' =&gt; \"\"\n    ];\n}\n\n\/\/ Exemple d'\u00fas\n$array_preguntes = file($fitxer); \/\/ Llegeix el fitxer i carrega les l\u00ednies en un array\n$pregunta_resposta = obtenirPreguntaAleatoria($array_preguntes);\n\n\/\/ Extraiem la pregunta i la resposta de l'array retornat\n$pregunta = $pregunta_resposta&#91;'pregunta'];\n$resposta = $pregunta_resposta&#91;'resposta'];\n\necho \"Pregunta aleat\u00f2ria: \" . $pregunta . \"&lt;br&gt;\";\necho \"Resposta: \" . $resposta;\n\nexit('67 estud');<\/code><\/pre>\n\n\n\n<p><strong>Correccions i millores realitzades:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Corregit el retorn:<\/strong> Ara la funci\u00f3 retorna un array associatiu amb les claus <code>'pregunta'<\/code> i <code>'resposta'<\/code>, en lloc de fer un retorn incorrecte amb una coma.<\/li>\n\n\n\n<li><strong>Millora en la gesti\u00f3 dels valors:<\/strong> Si <code>explode()<\/code> no troba una resposta, la funci\u00f3 assegura que es retorna un missatge alternatiu.<\/li>\n\n\n\n<li><strong>Correcci\u00f3 en la assignaci\u00f3 <code>$resposta=<\/code>:<\/strong> Ara extraiem correctament la pregunta i la resposta de l&#8217;array retornat.<\/li>\n<\/ol>\n\n\n\n<p>Per esborrar un element d&#8217;un array en PHP, pots utilitzar la funci\u00f3 <code>unset()<\/code>. Aquesta funci\u00f3 elimina un element espec\u00edfic de l&#8217;array sense reordenar-lo. Aqu\u00ed tens un exemple aplicat a <code>$array_preguntes<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Suposant que vols eliminar l'element en la posici\u00f3 $num_linia\nunset($array_preguntes&#91;$num_linia]);\n\n\/\/ Si vols reordenar els \u00edndexs despr\u00e9s d'esborrar un element:\n$array_preguntes = array_values($array_preguntes);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3:<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>unset($array_preguntes[$num_linia]);<\/code> \u2013 Elimina l&#8217;element especificat sense modificar la resta de l&#8217;array.<\/li>\n\n\n\n<li><code>array_values($array_preguntes);<\/code> \u2013 Reorganitza els \u00edndexs perqu\u00e8 siguin consecutius despr\u00e9s de l&#8217;eliminaci\u00f3 (si \u00e9s necessari).<\/li>\n<\/ol>\n\n\n\n<p>S\u00ed! Quan fas servir <code>unset($array_preguntes[5]);<\/code>, elimines la l\u00ednia 5 per\u00f2 els \u00edndexs de l&#8217;array continuen sent els mateixos. Aix\u00f2 vol dir que si fas <code>print_r($array_preguntes);<\/code>, veur\u00e0s que la clau 5 ja no existeix, per\u00f2 les altres l\u00ednies mantenen els seus \u00edndexs originals.<\/p>\n\n\n\n<p>Si vols que la l\u00ednia 6 es converteixi en la nova l\u00ednia 5, has de reordenar els \u00edndexs amb <code>array_values()<\/code>, aix\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unset($array_preguntes&#91;5]); \/\/ Esborra la l\u00ednia 5\n$array_preguntes = array_values($array_preguntes); \/\/ Reorganitza els \u00edndexs<\/code><\/pre>\n\n\n\n<p>Ara <code>print_r($array_preguntes);<\/code> mostrar\u00e0 l&#8217;array amb \u00edndexs seq\u00fcencials, i la l\u00ednia 6 (que abans venia despr\u00e9s de la 5) ocupar\u00e0 la posici\u00f3 5.<\/p>\n\n\n\n<p>Si vols que el teu codi informi quan no hi ha l\u00ednies disponibles despr\u00e9s d&#8217;eliminar elements, pots afegir una verificaci\u00f3 abans de seleccionar una pregunta aleat\u00f2ria. Aqu\u00ed tens el codi complet corregit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function obtenirPreguntaAleatoria(&amp;$array_preguntes) {\n    \/\/ Comprova si queden l\u00ednies disponibles\n    $nombre_linies = count($array_preguntes);\n    if ($nombre_linies === 0) {\n        return &#91;\n            'pregunta' =&gt; \"No hi ha preguntes disponibles.\",\n            'resposta' =&gt; \"\"\n        ];\n    }\n\n    \/\/ Selecciona una l\u00ednia aleat\u00f2ria\n    $num_linia = random_int(0, $nombre_linies - 1);\n\n    \/\/ Separa pregunta i resposta (assumint que la separaci\u00f3 \u00e9s \" &gt; \")\n    $parts = explode(' &gt; ', trim($array_preguntes&#91;$num_linia]));\n\n    \/\/ Esborra la l\u00ednia seleccionada\n    unset($array_preguntes&#91;$num_linia]);\n\n    \/\/ Reorganitza els \u00edndexs perqu\u00e8 siguin consecutius\n    $array_preguntes = array_values($array_preguntes);\n\n    \/\/ Retorna la pregunta i la resposta com un array\n    return &#91;\n        'pregunta' =&gt; $parts&#91;0] ?? \"Pregunta no trobada\",\n        'resposta' =&gt; $parts&#91;1] ?? \"Resposta no trobada\"\n    ];\n}\n\n\/\/ Exemple d'\u00fas\n$array_preguntes = file($fitxer); \/\/ Llegeix el fitxer i carrega les l\u00ednies en un array\nwhile (count($array_preguntes) &gt; 0) {\n    $pregunta_resposta = obtenirPreguntaAleatoria($array_preguntes);\n    echo \"Pregunta aleat\u00f2ria: \" . $pregunta_resposta&#91;'pregunta'] . \"&lt;br&gt;\";\n    echo \"Resposta: \" . $pregunta_resposta&#91;'resposta'] . \"&lt;br&gt;\";\n}\n\n\/\/ Quan no hi ha m\u00e9s preguntes\necho \"Totes les preguntes s'han esgotat!\";\n\nexit('67 estud');<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Qu\u00e8 fa aquest codi?<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Comprova si queden l\u00ednies disponibles:<\/strong> Si <code>count($array_preguntes) === 0<\/code>, retorna el missatge <em>&#8220;No hi ha preguntes disponibles.&#8221;<\/em><\/li>\n\n\n\n<li><strong>Selecciona i esborra una l\u00ednia aleat\u00f2ria:<\/strong> <code>unset($array_preguntes[$num_linia]);<\/code> elimina la l\u00ednia seleccionada.<\/li>\n\n\n\n<li><strong>Reorganitza els \u00edndexs:<\/strong> <code>array_values($array_preguntes);<\/code> assegura que les posicions de l&#8217;array continu\u00efn consecutives.<\/li>\n\n\n\n<li><strong>Executa fins que no hi hagi preguntes:<\/strong> L&#8217;estructura <code>while (count($array_preguntes) > 0)<\/code> garanteix que es generin preguntes fins a esgotar-les.<\/li>\n\n\n\n<li><strong>Mostra un av\u00eds quan ja no hi ha preguntes disponibles:<\/strong> <code>\"Totes les preguntes s'han esgotat!\"<\/code><\/li>\n<\/ol>\n\n\n\n<p>Exactament! Si vas eliminant les l\u00ednies del principi (o d&#8217;un punt aleatori) i reorganitzes l&#8217;array, est\u00e0s simulant el comportament d&#8217;una cua (queue), on els elements es processen en ordre d&#8217;arribada i desapareixen una vegada utilitzats.<\/p>\n\n\n\n<p>Si vols gestionar-ho expl\u00edcitament com una cua, podries utilitzar <code>array_shift()<\/code>, que extreu i retorna el primer element de l&#8217;array, mantenint la resta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$pregunta_resposta = explode(' &gt; ', trim(array_shift($array_preguntes)));\n$pregunta = $pregunta_resposta&#91;0] ?? \"Pregunta no trobada\";\n$resposta = $pregunta_resposta&#91;1] ?? \"Resposta no trobada\";<\/code><\/pre>\n\n\n\n<p>Aquest enfocament \u00e9s \u00fatil si vols evitar la necessitat de reordenar els \u00edndexs amb <code>array_values()<\/code>, ja que sempre treballar\u00e0s amb el primer element disponible.<\/p>\n\n\n\n<p>No exactament! Els arrays que est\u00e0s manipulant amb <code>file($fitxer)<\/code> es comporten com <strong>arrays indexats<\/strong>, no com a <strong>arrays associatius<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Difer\u00e8ncies:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Array indexat<\/strong> (el teu cas): Les claus s\u00f3n num\u00e8riques i generades autom\u00e0ticament (0, 1, 2, \u2026).<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>  $array_preguntes = &#91;\"Pregunta 1 &gt; Resposta 1\", \"Pregunta 2 &gt; Resposta 2\"];\n  echo $array_preguntes&#91;0]; \/\/ Mostra la primera l\u00ednia<\/code><\/pre>\n\n\n\n<p>Aix\u00f2 \u00e9s el que tens amb <code>file($fitxer)<\/code>, perqu\u00e8 cada l\u00ednia del fitxer es guarda amb un \u00edndex num\u00e8ric.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Array associatiu<\/strong>: Les claus s\u00f3n definides manualment i poden ser noms.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>  $preguntes = &#91;\n      \"pregunta1\" =&gt; \"Resposta 1\",\n      \"pregunta2\" =&gt; \"Resposta 2\"\n  ];\n  echo $preguntes&#91;\"pregunta1\"]; \/\/ Mostra la resposta associada<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Simulaci\u00f3 d&#8217;un array associatiu:<\/h3>\n\n\n\n<p>Si vols convertir el teu array de preguntes en un array associatiu (on la pregunta sigui la clau i la resposta el valor), pots fer aix\u00f2:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$preguntes_associatiu = &#91;];\nforeach ($array_preguntes as $linia) {\n    $parts = explode(' &gt; ', trim($linia));\n    $preguntes_associatiu&#91;$parts&#91;0]] = $parts&#91;1] ?? \"Resposta no disponible\";\n}\n\nprint_r($preguntes_associatiu);<\/code><\/pre>\n\n\n\n<p>D&#8217;aquesta manera, podr\u00e0s accedir a les respostes de manera associativa, com <code>echo $preguntes_associatiu[\"camera\"];<\/code>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Per comptar el nombre de l\u00ednies d&#8217;un array en PHP, pots utilitzar la funci\u00f3 count(). Aix\u00ed, si has llegit el fitxer en un array amb file($fitxer), pots obtenir el nombre de l\u00ednies amb: Aquesta funci\u00f3 compta el nombre d&#8217;elements dins &hellip; <a href=\"http:\/\/www.beseit.net\/?p=16161\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":3170,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[72],"tags":[],"class_list":["post-16161","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php"],"_links":{"self":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16161"}],"version-history":[{"count":2,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16161\/revisions"}],"predecessor-version":[{"id":16163,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16161\/revisions\/16163"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/3170"}],"wp:attachment":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16161"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16161"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}