@Orange___XD

Как исправить проблему с циклами foreach и массивом php?

Всем привет. Есть у меня вот такой вот код:
$textareaValue = 'aaa@aaa|aaa/nbbb@bbb|bbb/nggg@ggg|ggg';
$smth = explode('/n',$textareaValue);
foreach ($smth as $aa => $bb) {
list($emails, $passwords) = explode('|', $bb);
foreach ($emails as $a1 => $b1) {
    echo $b1.':';
}
foreach ($passwords as $a2 => $b2) {
     echo $b2.'<br>';
     } 
}

Код делит сначала строку на строки вида "aaa@aaa|aaa" и добавляет их в массив, а затем каждую строку в массиве делит на еще на две части, но они записываются в два разных массива. С ключами в них творится вообще непонятно что: рандомно выставляется 0 или 1. Подскажите пожалуйста, как объединить их после деления в один массив вида $key => $item, где $key будет равен "test@test.ru" (Пример), а $item будет равен "test" (Пример)? Или хотя бы как сделать так, чтобы ключи в массивах после деления шли от 0 и до n?

Есть подозрения, что проблема в list(), но как исправить не знаю.
  • Вопрос задан
  • 2649 просмотров
Решения вопроса 3
@yanchumak
/n это новая строка? если да,то это не новая строка,вот символ новой строки \n
Ответ написан
@Arik
$textareaValue = 'aaa@aaa|aaa/nbbb@bbb|bbb/nggg@ggg|ggg';

$explode_1 = explode('/n', $textareaValue);

foreach ($explode_1 as $value_1)
    {
    $explode_2 = explode('|', $value_1, 2);

    echo $explode_2[0] .': '. $explode_2[1] .'<br />';
    }
Ответ написан
undefine
@undefine
Senior Software Engineer / PHP
Для начала, ваш код бросает исключение «Invalid argument supplied for foreach()» когда вы пытаетесь пройтись по переменной $emails, которая строка.

Далее, что будет, если в пароле встречается символ |?

Далее, при добавлении в конец $textareaValue /n, код тоже валится — плохо.

Вообще, вам следует больше уделить внимания вашему code-style, а также посмотреть в сторону xDebug.

Рабочий код:
$textareaValue = 'aaa@aaa|a|aa/nbbb@bbb|bbb/nggg@ggg|ggg/n';
$explodedTextarea = explode('/n', $textareaValue);

$result = array();
foreach ($explodedTextarea as $line) {
	list($email, $password) = array_pad(explode('|', $line, 2), 2, null);
	
	if ($email) { 
		$result[$email] = $password;
	}
}

print_r($result);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы