Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сформировать ассоциативный массив?
 
 автор: sirius1981   (18.11.2008 в 14:04)   письмо автору
 
 

Добрий день!
Подскажите пожалсто как сделат из ассоциотивного array такого формата:
rray
(
[0] => Array
(
[pack_id] => 91047192880
[po_nummer] => 123 434 234 871
[nummerierung_packstueck] => 1
)

[1] => Array .........
)
такой

[0] => Array
(
[pack_id] => 91047192880
[p_nummer] =>123
=>234
=>434
=>871
[nummerierung_packstueck] => 1
)

[1] => Array .........
)

мне надо чтобы каждая запис в p_nummer была в новои стро4ке

толко не в коем слу4ае такои формат

[p_nummer] =>123
[p_nummer] =>234
[p_nummer] =>434
[p_nummer] =>871

мне надо в конце-концво показат ползователю толко
[p_nummer] =>123
=>234
=>434
=>871

можно как-то проходит [p_nummer] и при помощи if искать пробел ' ' и наидя пробел заменятъ его на '/n ' это будет работат? - я 4увствую 4то нет

Зарание спасибо

  Ответить  
 
 автор: sim5   (18.11.2008 в 14:21)   письмо автору
 
   для: sirius1981   (18.11.2008 в 14:04)
 

Разбейте значение ключа [po_nummer] по пробелу и полученный массив присвойте этому же ключу.

  Ответить  
 
 автор: Sirius1981   (18.11.2008 в 14:32)   письмо автору
 
   для: sim5   (18.11.2008 в 14:21)
 

да но как это сделать? как передвигатся по ['po_nummer']

$j=0;;
for($i=0;$i<$count_1;++$i){
while($merge[$i]['po_nummer']){
if($merge[$i]['po_nummer'][$j]==' '){
$merge[$i][['po_nummer'][$j]='/n'

}
++$j;
}

}

  Ответить  
 
 автор: sim5   (18.11.2008 в 15:11)   письмо автору
 
   для: Sirius1981   (18.11.2008 в 14:32)
 

<?
$m 
= array(array(
'pack_id' => 91047192880,
'po_nummer' => '123 434 234 871',
'nummerierung_packstueck' => 1)
);

for (
$i=0$i<count($m); $i++) {
  foreach (
$m[$i] as $key => $val) {
    if (
$key == 'po_nummer' && !is_array($key)) {
      
$val explode(" "$val);
      
$m[$i][$key] = $val;
    }
  }
}
print_r($m);

  Ответить  
 
 автор: Sirius1981   (18.11.2008 в 15:32)   письмо автору
 
   для: sim5   (18.11.2008 в 15:11)
 

O spasibo ogromnoe, sei4as budu experementirowat!!!

  Ответить  
 
 автор: sirius1981   (27.11.2008 в 13:19)   письмо автору
 
   для: sim5   (18.11.2008 в 15:11)
 

Spasibo sa sowet, wsje rabotaet, tolko ne sowsem tak kak hotelos bi....

problema w tom 4to array m stanowitsja =4 m[4]

m[0]=>array[0]=>123
array[1]=>434
.
.

m[1]=>
m[2]=>
m[3]=>

kak sastawit ego detat tolko m[0]?

  Ответить  
 
 автор: sim5   (27.11.2008 в 13:26)   письмо автору
 
   для: sirius1981   (27.11.2008 в 13:19)
 

Не понял, что значит m[4]? Будет столько проходов, сколько элементов в массиве, и преобразовываться будет только соответствующий ключ, и то при условии, если это уже не массив, а строка.

  Ответить  
 
 автор: Sirius1981   (27.11.2008 в 13:40)   письмо автору
 
   для: sim5   (27.11.2008 в 13:26)
 

polu4aetsja takaja schtu ka 4to ramer array m prinimaet sna4enie skolko ras on w foreach sahodit......

rasmer array m 1 m[0] i k nemu prenadleschschie 123
434....


m[0]=>array[0]=>123 434 234 871

(123 434 234 871) rasmer = 4

on mne uweli4iwaet rasmer rasmer do 4 m[0]=>array(.....)

  Ответить  
 
 автор: sim5   (27.11.2008 в 13:49)   письмо автору
 
   для: Sirius1981   (27.11.2008 в 13:40)
 

Вы лучше полный исходный массив приложите, а то в этих каракулях... Если у вас строка равна "123 434 234 871", то полученный массив и будет содержать 4 элемента, конечно при условии, что нет лишних проблев в строке, в начале и конце, но их можно устранить - trim().
А так ничего не понял, что нужно. Давайте исходный массив, и пример того, что надо получить.

  Ответить  
 
 автор: Sirius1981   (27.11.2008 в 14:08)   письмо автору
37.5 Кб
 
   для: sim5   (27.11.2008 в 13:49)
 

wot w doc w wnjem opisana problema s ishodnikami i resultatami....

  Ответить  
 
 автор: sim5   (27.11.2008 в 14:38)   письмо автору
 
   для: Sirius1981   (27.11.2008 в 14:08)
 

Так чего вы хотите? У вас ведь ключ [po_nummer] содержит разный набор данных, а не только числа чинно разделенные проблом, как вы ранее показывали. А explode(), в коде, делит строку по пробелу, вот у вас и появляется бардак. То что пустые элементы массива получаются, я уже говорил, это из-за пробелов в конце и в начале строки может быть, убирайте их с помощью trim() перед тем как выполнить explode(). Приведите свои записи в исходнике к одному типу, разделив пробелом, и проблем не будет, иначе решайте эту проблему (разделение на массив) рег. выражениями.

  Ответить  
 
 автор: Sirius1981   (27.11.2008 в 15:04)   письмо автору
 
   для: sim5   (27.11.2008 в 14:38)
 

Ja sche array rasdelaju snakom ';'


i w foreach ja goworju:

foreach ($merge[$i] as $key => $val) {
if ($key == 'po_nummer' && !is_array($key)) {
$val = explode(";", $val);
$merge[$i][$key] = $val;
}
}


Sdes ja kak rasdelitelnii snako daju ' ; ' $val = explode(";", $val);

  Ответить  
 
 автор: MIchail1982   (27.11.2008 в 15:01)   письмо автору
 
   для: Sirius1981   (27.11.2008 в 14:08)
 

а если так?

<?php
// $a - исходный массив
// $b - массив с результатом
foreach($a as $a_key=>$a_val){
    
$b[$a_key][pack_id] = $a_val[pack_id];
    
$b[$a_key][nummerierung_packstueck] = $a_val[nummerierung_packstueck];
    
$b[$a_key][po_nummer] = explode(' ',$a_val[po_nummer]);
}
?>

  Ответить  
 
 автор: sim5   (27.11.2008 в 15:10)   письмо автору
 
   для: MIchail1982   (27.11.2008 в 15:01)
 

Не знаю. Делайте что хотите, у вас куча всевозможного в исходной строке. Либо строки приводите к одному, либо рег. выражения, либо то чего вы показываете, чего мне не понять, ибо вам виднее, что, от куда, чего, и куда...

  Ответить  
 
 автор: Sirius1981   (27.11.2008 в 15:27)   письмо автору
 
   для: sim5   (27.11.2008 в 15:10)
 

Да строку я же разделяю ' ; ' и в $val = explode(";", $val); я говорю же после ' ; ' должно быт разделение ; ?


Функция explode делит строку но блин почему она ещё в конце добовляет ешё одну строку


[0] => Array
(
[pack_id] => 91106925
[po_nummer] => 7108/1294;
[nummerierung_packstueck] => 1
)

resultat:

[0] => Array
(
[pack_id] => 91106925
[po_nummer] => Array
(
[0] => 7108/1294
[1] =>
)

[nummerierung_packstueck] => 1
)

  Ответить  
 
 автор: sim5   (27.11.2008 в 15:53)   письмо автору
 
   для: Sirius1981   (27.11.2008 в 15:27)
 

Если ваша строка содержит, например - "1;2", то explode(";" $s) вернет вам массив с двумя элементами, первый равный 1, а второй 2. Если ваша строка содердит "1;", то explode(";" $s) вернет вам массив с двумя элементами, первый равный 1, а второй пустой. Другого объяснения нет.

  Ответить  
 
 автор: MIchail1982   (27.11.2008 в 15:54)   письмо автору
 
   для: Sirius1981   (27.11.2008 в 15:27)
 

и будет вам счастье....
ЗЫ добавлялся лишний, потомучто в конце стоял ";"

<?php
foreach($a as $a_key=>$a_val){
    
$a[$a_key][po_nummer] = explode(';',str_replace' ','',substr($a_val[po_nummer],0,strlen($a_val[po_nummer])-1)));
}
?>

  Ответить  
 
 автор: sim5   (27.11.2008 в 16:21)   письмо автору
 
   для: MIchail1982   (27.11.2008 в 15:54)
 

Вместо этого достаточно сделать rtrim(string, ";").

  Ответить  
 
 автор: MIchail1982   (27.11.2008 в 16:51)   письмо автору
 
   для: sim5   (27.11.2008 в 16:21)
 

не факт, rtrim тут не сработал бы, т.к он работает ДО explode. и если бы пробелы были внутри(а так и было) то 1й элемент начинался бы с пробела

  Ответить  
 
 автор: sim5   (27.11.2008 в 16:56)   письмо автору
 
   для: MIchail1982   (27.11.2008 в 16:51)
 

Эта "хреновина" вырезает то, что я укажу ей, и только в конце строки.

[поправлено модератором]

  Ответить  
 
 автор: Sirius1981   (27.11.2008 в 21:21)   письмо автору
 
   для: sim5   (27.11.2008 в 16:56)
 

rebjata spasibo wsem wam sa pomosch.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования