#php #arrays
#php #массивы
Вопрос:
Это php-код:
$slavesites = array(
'Category1' => array('Anchor1', 'http://www.test1.com'),
'Category2' => array('Anchor2', 'http://www.test2.com')
);
foreach($slavesites as $category => $slavesite){
echo $category;
foreach($slavesite as $anc => $url){
echo $anc.'<br>';
echo $url.'<br>';
}
}
Проблема в том, что когда я запускаю код, я получаю «0» и «1»:
Category10 **--- WHERE DOES THE 0 COME FROM?**
Anchor1
1 **---- WHERE DOES THE 1 COME FROM?**
http://www.test1.com
Category20 --- WHERE DOES THE 0 COME FROM?
Anchor2
1 ---- WHERE DOES THE 1 COME FROM?
http://www.test2.com
Тьфу!:)
Надеюсь, вы сможете помочь…
Ответ №1:
второй foreach выполняет итерацию по массиву без надлежащего набора индексов. таким образом, используются индексы по умолчанию (0,1,2, …) и, следовательно, число в выходных данных.
например, на самом деле ваше определение выглядит следующим образом:
$slavesites = array(
'Category1' => array(0 => 'Anchor1', 1 => 'http://www.test1.com'),
'Category2' => array(0 => 'Anchor2', 1 => 'http://www.test2.com')
);
вы должны использовать ‘list’ вместо ‘foreach’ во внутреннем цикле:
list($anc, $url) = $slavesite;
Комментарии:
1. Это сработало, ты так сильно…. У меня есть один вопрос, хотя вместо значений «Category1» и «Category2» я использую одно и то же значение, мой первый цикл foreach покажет онлайн данные второго массива, а не первого … для меня это проблема, потому что иногда у меня одна и та же категория для нескольких сайтов.
2. вы имеете в виду вот так? массив (‘Cat’ => array(…), ‘Cat’ => array(…)) ?
3. да, определенно вы это имеете в виду. к несчастью, это не сработавший способ. структурируйте ваши данные следующим образом, если вы хотите обработать, добавьте одинаковые имена категорий: array( ‘Category’ => array( array(‘Name’, ‘ url /’ ), array(‘Name2’, ‘ url2 /’ )), ‘Category2’ => … );
Ответ №2:
Если вы хотите выполнять цикл по своему массиву подобным образом, вы должны хранить элементы в виде пар ключ-значение:
$slavesites = array(
'Category1' => array('Anchor1' => 'http://www.test1.com'),
'Category2' => array('Anchor2' => 'http://www.test2.com')
);
0
и 1
показаны, потому что у вас не определены ключи, и поэтому используются цифровые ключи.