Неустранимая ошибка: Не удается отменить ошибку смещения строки?
Не уверен, почему это происходит: В принципе, у меня есть массив, содержащий следующие массивы, см. 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++;
}
Есть идеи, что я делаю не так? Должен Я пойду по этому другому пути?
Спасибо,
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;
}
Отобразит ключ и значение для каждой пары ключ/значение в массиве.
У меня была эта ошибка в несколько иной ситуации, которая может оказаться полезной.
unset($search['param']['complete'])
Это вызвало ту же ошибку, когда $search['param'] все еще был строкой вместо массива .
Я полагаю, что у вас есть синтаксис для foreach
wrong...it должно быть $key => $value
там, где у вас есть $key => $arr2
. Поэтому, когда у вас есть $arr2[$key]
, вы ищете элемент $key
во вложенном массиве $arr2
. На $arr2
ссылается $key
, который является либо строкой (для ассоциативного массива), либо целым числом (для неассоциативного массива). $arr2
также может ссылаться $arr[$key]
.
Ошибка в коде.
После того, как вы назначите
$arr2[$key] = $arr2[$key][0];
$arr2[$key]
становится строкой "ivr"
и $arr2[$key][0]
является первым символом строки и не может быть снят