Почему это дает следующее:
foreach( $store as $key => $value){ $value = $value.".txt.gz"; } unset($value); print_r ($store); Array ( [1] => 101Phones - Product Catalog TXT [2] => 1-800-FLORALS - Product Catalog 1 )
Я пытаюсь получить 101Phones – Каталог продукции TXT.txt.gz
Мысли о том, что происходит?
EDIT: Хорошо, я нашел решение … мои переменные в моем массиве имели значения, которые я не мог видеть …
$output = preg_replace('/[^(\x20-\x7F)]*/','', $output); echo($output);
Убрал его и заработал правильно
В документе http://php.net/manual/en/control-structures.foreach.php четко указано, почему у вас есть проблема:
«Чтобы иметь возможность напрямую изменять элементы массива в цикле, перед значением $ value нужно указать &. В этом случае значение будет присвоено ссылкой».
<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // break the reference with the last element ?>
с<?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // break the reference with the last element ?>
Ссылка на значение $ возможна только в том случае, если можно использовать итерированный массив (т.е. если это переменная). Следующий код не будет работать:
<?php /** this won't work **/ foreach (array(1, 2, 3, 4) as &$value) { $value = $value * 2; } ?>
Пытаться
foreach( $store as $key => $value){ $store[$key] = $value.".txt.gz"; }
Переменная $value
в массиве является временной, она не относится к записи в массиве.
Если вы хотите изменить исходную запись массива, используйте ссылку:
foreach ($store as $key => &$value) { // ^ reference $value .= '.txt.gz'; }
Вы переписываете значение в цикле, а не ключевую ссылку в вашем массиве.
Пытаться
$store[$key] = $value.".txt.gz";
передать $value
в качестве ссылки:
foreach( $store as $key => &$value){ $value = $value.".txt.gz"; }
Пытаться
$catalog = array(); foreach( $store as $key => $value){ $catalog[] = $value.".txt.gz"; } print_r ($catalog);
ИЛИ
foreach( $store as $key => $value){ $store[$key] = $value.".txt.gz"; } print_r ($store);
Зависит от того, чего вы хотите достичь
Благодаря 🙂
Я считаю, что это то, что вы хотите сделать:
foreach( $store as $key => $value){ $store[$key] = $value.".txt.gz"; } unset($value); print_r ($store);
сforeach( $store as $key => $value){ $store[$key] = $value.".txt.gz"; } unset($value); print_r ($store);
Как насчет карты массива:
$func = function($value) { return $value . ".txt.gz"; }; print_r(array_map($func, $store));
foreach(array_container as & array_value)
Способ изменения значения элемента массива внутри цикла foreach.