Код подмассивов Php добавляет дополнительные значения

#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 показаны, потому что у вас не определены ключи, и поэтому используются цифровые ключи.