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