web-dev-qa-db-fra.com

Erreur irrécupérable: vous ne pouvez pas annuler l'erreur de compensation de chaîne?

Vous ne savez pas pourquoi cela se produit: j'ai un tableau contenant les tableaux suivants, voir var_dump:

array(2) { 
  [0]=> array(1) { 
    [0]=> string(3) "ivr" 
  } 
  [1]=> array(1) { 
    [0]=> string(9) "ivr_dests" 
  } 
}

Évidemment, ces données sont un peu redondantes, mais c'est ce qui a été renvoyé lors de l'obtention des valeurs avec xpath. Je fais donc une foreach pour parcourir la première array() et assigner ses valeurs de tableau imbriquées dans le premier tableau.

En gros, il devrait retourner ceci:

array(2) {
  [0]=> string(3) "ivr"
  [1]=> string(9) "ivr_dests"
}

Alors voici ce que j'ai mis en place:

foreach($arr as $key => $arr2){
    $arr2[$key] = $arr2[$key][0];
    unset($arr2[$key][0]); //This returns Fatal error: Cannot unset string offsets
//if I comment out the unset(), $arr[$key] returns the same value as it did (multidim array)
};

        //I tried this too:
$i=0;
foreach($arr as $arr2){
  $arr2[$i] = $arr2[$i][0];
  $i++;
}

Des idées que je fais mal? Devrais-je m'y prendre autrement?

Merci,

13
Jared

Vous n'avez pas besoin de la valeur non définie, vous substituez les paramètres externes à la valeur du tableau interne, par opposition au tableau entier.

$a1 = array("ivr");
$a2 = array("ivr2");

$a3 = array($a1, $a2);

foreach($a3 as $key => $value){
    $a3[$key] = $a3[$key][0];
    //unset($arr2[$key][0]);
};

var_dump($a3);

Je pense que vous ne savez pas comment fonctionne foreach.

foreach($array as $key => $value)
{
  echo $key;
  echo $value;
}

affichera la clé et la valeur de chaque paire clé/valeur dans un tableau.

7
Tom

J'ai eu cette erreur dans une situation légèrement différente qui pourrait s'avérer utile.

unset($search['param']['complete'])

Cela provoquait la même erreur lorsque $ search ['param'] était toujours un string au lieu d'un array .

6
Steve Tauber

Je crois que vous avez la syntaxe pour le foreach faux ... ce devrait être $key => $value où vous avez $key => $arr2. Ainsi, lorsque vous avez $arr2[$key], vous recherchez l'élément $key dans le tableau imbriqué $arr2. $arr2 est référencé par $key, qui est une chaîne (pour un tableau associatif) ou un entier (pour un tableau non associatif). $arr2 pourrait également être référencé par $arr[$key].

http://php.net/manual/en/control-structures.foreach.php

2
taz

L'erreur est dans le code.
Après avoir assigné 

$arr2[$key] = $arr2[$key][0];

$arr2[$key] devient la chaîne "ivr" et $arr2[$key][0] est le premier caractère de la chaîne et ne peut pas être désactivé

1
Enzo Apollonio