2015-01-23 2 views
1

У меня есть две строки, одна из которых содержит имена, разделенные запятыми, а другая - адреса электронной почты, разделенные запятыми.Взорвать, а затем объединить массивы

теперь я хочу, чтобы мой конечный результат повторить поведение, как если бы я получил эти значения из базы данных с помощью:

while ($row = $query->fetch(PDO::FETCH_ASSOC)) { 
    echo $row['name'].'<br />'.$row['email']; 
} 

Так что я, например, эти строки:

[email protected],[email protected],[email protected] 

и

name1,name2,name3 

И может затем взорвать их в массивах значений. Теперь, после взрыва их, я хочу, чтобы иметь возможность сделать петлю, где в каждом цикле я могу получить $name[0] и $email[0] вместе, и $name[1] и $email[1] вместе, и т.д.

Как объединить два массива (после взрыва их) и получить данные для каждого файла данных (имя и адрес электронной почты) в цикле?

+0

Не может быть просто 'Эхо $ строки [ 'имя']. ​​''. $ Строки [ 'электронная почта'].»
'; '? –

+0

Более подробная информация будет отличной броузой, как и у вашего входа, и выходом, который вы хотите иметь. –

+0

какие массивы?единственным массивом там будет '$ row', который содержит массив данных из любой строки результатов запроса, которые вы получили. –

ответ

2

Так что, если я понял, вы правы, вы конвертируете ваши строки (позволяет называть их по электронной почте, и имя) тоже два массива (позволяет называть их arrEmail и arrName) и теперь вы хотите получить массив с объединенными наборами данных (создание массивов должно быть простым, если не проверить это: manual for php explode function)

Если это так, я бы создал цикл for, основанный на длине ваших двух массивов. В цикле я извлекал значение i arrEmail и arrName и помещал информацию в двумерный массив. Возможно, что-то вроде этого:

Он должен работать, но я не тестировал его на века, поэтому, если не оставить комментарий.

<?php 
 
    $arrEmail = array(); 
 
    $arrName = array(); 
 
    
 
    $arrGoal; 
 

 
    $arrLength = count($arrName); 
 
    
 
    //creating two-dimensional Array 
 
    for($i = 0; $i < $arrLength; $i++){ 
 
    $arrGoal[$i] = array($arrName[$i], $arrEmail[$i]); 
 
    //should look something like this ((name, email),(name, email)…) 
 
    } 
 
    
 
    $arrGoalLength = count($arrGoal); 
 

 
    //accessing Array 
 
    //1. dimension 
 
    for($i = 0; $i < $arrGoalLength; $i++){ 
 
    //2. dimension 
 
     //Variables should be global (but aren't) 
 
     $newName = $arrGoal[$i][0]; 
 
     $newEmail = $arrGoal[$i][1]; 
 
    } 
 
?> 
 

+0

Спасибо, это сработает. Это более продуманная версия того, что некоторые другие уже опубликовали, но это объяснение является самым ясным. – s1h4d0w

2

Я думаю, что вы хотите что-то вроде этого:

$output = array(); 
for ($i = 0; $i < count($names); $i++) { 
    $output[] = $names[$i] . ' ' . $emails[$i]; 
} 
print_R($output); 
+0

Я бы немного скорректировал его, чтобы значения 'name' /' email' были под-ключами массива '$ output', но это, по сути, anwser, который я бы выбрал. – Martin

+0

Ах, я даже не думал об этом так, спасибо! Думаю, я смогу создать что-то из этого. – s1h4d0w

0

Я думаю, вы должны использовать встроенный в explode функции Wich позволит вам превратить строку в массив по spliting его, используя разделитель (запятая):

$names = explode(",",$row['name']); 
$email = explode(",",$row['email']); 

для их объединения вы должны использовать что-то вроде этого

$Array = array(); 
for ($j = 0; $j < count($names); $j++) { 
    $Array[] = [$names[$j],$email[$j]]; 
} 
+0

, но он хочет объединить два массива после расщепления. – Martin

+0

Спасибо за редактирование, это хороший ответ. lulco был немного быстрее, но все же правильный ответ. – s1h4d0w

2
$emails = '[email protected],[email protected],[email protected]'; 
$emails = explode(',', $emails); 

$names = 'name1,name2,name3'; 
$names = explode(',', $names); 

и вы можете использовать array_combine() следующим образом:

$combined = array_combine($names, $emails); 

foreach($combined as $name => $email){ 
    echo $name, ' : ', $email, '<br/>'; 
} 
+0

Это не работает, это только эхо двоеточие. – s1h4d0w

0

Это своего рода связанный с вашим вопросом, но только если вы хотите получить доступ к значению по ключу (например. доступ к имени по электронной почте в комплект поставки):

<?php 

     $emails = '[email protected],[email protected],[email protected]'; 
     $names = 'name1,name2,name3'; 

     $arrayEmails = explode(',',$emails); 
     $arrayNames = explode(',',$names); 

     $result = array_combine($arrayEmails, $arrayNames); 



     print_r($result); 

    ?> 
+0

Simo дал аналогичный ответ, но с foreach после array_combine, но он, похоже, не работает. – s1h4d0w

+0

Я могу создать хороший результат сам с этим кодом (который основан на ваших входных массивах). Это не работает для вас или? – Whirlwind

Смежные вопросы