Подтвердить что ты не робот

Неустранимая ошибка: не удается удалить ошибку смещения строки?

Не знаю, почему это происходит: В принципе, у меня есть массив, содержащий следующие массивы, см. var_dump:

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

Очевидно, что эти данные являются излишними, но это то, что было возвращено при получении значений с помощью xpath. Поэтому я делаю foreach, чтобы пропустить первый array() и назначить ему вложенные значения массива в первом массиве.

В принципе, он должен вернуть это:

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

Итак, вот что я установил:

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++;
}

Любые идеи, что я делаю неправильно? Должен ли я пойти по этому пути?

Спасибо,

4b9b3361

Ответ 1

Вам не нужно отменять, вы переопределяете внешние параметры со значением внутреннего массива, а не всего массива.

$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);

Я думаю, вы смущены тем, как работает foreach.

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

отобразит ключ и значение для каждой пары ключ/значение в массиве.

Ответ 2

У меня была эта ошибка в несколько иной ситуации, которая может оказаться полезной.

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

Это породило ту же ошибку, когда $search ['param'] по-прежнему был строкой вместо массива .

Ответ 3

Я считаю, что у вас синтаксис для foreach неправильный... он должен быть $key => $value, где у вас есть $key => $arr2. Поэтому, когда у вас есть $arr2[$key], вы ищете элемент $key во вложенном массиве $arr2. $arr2 ссылается на $key, который является либо строкой (для ассоциативного массива), либо целым числом (для неассоциативного массива). $arr2 также можно ссылаться на $arr[$key].

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

Ответ 4

Ошибка в коде.
После того, как вы назначили

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

$arr2[$key] становится строкой "ivr", а $arr2[$key][0] является первым символом строки и не может быть отменен

Ответ 5

Это происходит, когда вы пытаетесь сбросить строковое значение. В следующем случае вы получаете доступ к первому элементу в массиве, который является строкой, и пытаетесь сбросить его, что вызывает эту ошибку

$a=array("hello", "there");
unset($a[0][0]);


 Это вызывает:

Fatal error:  Cannot unset string offsets in ... on line ...