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


Не уверен, почему это происходит: В принципе, у меня есть массив, содержащий следующие массивы, см. 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++;
}

Есть идеи, что я делаю не так? Должен Я пойду по этому другому пути?

Спасибо,

Author: Jared, 2012-09-06

4 answers

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

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

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

 7
Author: Tom, 2012-09-05 21:13:58

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

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

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

 6
Author: Steve Tauber, 2014-05-22 17:22:45

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

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

 2
Author: taz, 2012-09-05 21:06:34

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

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

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

 1
Author: Enzo Apollonio, 2016-02-16 10:21:20