Как избежать "двойной" индексации массива?

Тема в разделе "PHP", создана пользователем Artu, 3 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Есть массив,в данном случае со вложенным массивом..Ниже приведен его вывод с print_r.Он выводит сначала цифровые индексы,а потом именные.Как сделать что б были только именные?Нужно, потому что, скрипт преобразования массива в XML,тоже задваивает значения.

    Array
    (
    [order] => Array
    (
    [0] => Array
    (
    [0] => 23
    [1] => 3
    [2] => 2009-04-03 17:39:50
    [3] => 127.0.0.1
    [4] => Курьер
    [5] => Наличные
    [6] =>
    [7] => 2
    [8] => 0
    [9] => 0
    [10] => 49000
    [11] => UAH
    [12] => 1
    [13] => Данило
    [14] => Галицкий
    [15] => galich@ukr.net
    [16] => Данило
    [17] => Галицкий
    [18] => Украина
    [19] => Львовская
    [20] => 23000
    [21] => Львов
    [22] => ул.Валова,дом 3,кв.1
    [23] => Данило
    [24] => Галицкий
    [25] => Украина
    [26] => Львовская
    [27] => 23000
    [28] => Львов
    [29] => ул.Валова,дом 3,кв.1
    [30] =>
    [31] =>
    [32] =>
    [33] =>
    [orderID] => 23
    [customerID] => 3
    [order_time] => 2009-04-03 17:39:50
    [customer_ip] => 127.0.0.1
    [shipping_type] => Курьер
    [payment_type] => Наличные
    [customers_comment] =>
    [statusID] => 2
    [shipping_cost] => 0
    [order_discount] => 0
    [order_amount] => 49000
    [currency_code] => UAH
    [currency_value] => 1
    [customer_firstname] => Данило
    [customer_lastname] => Галицкий
    [customer_email] => galich@ukr.net
    [shipping_firstname] => Данило
    [shipping_lastname] => Галицкий
    [shipping_country] => Украина
    [shipping_state] => Львовская
    [shipping_zip] => 23000
    [shipping_city] => Львов
    [shipping_address] => ул.Валова,дом 3,кв.1
    [billing_firstname] => Данило
    [billing_lastname] => Галицкий
    [billing_country] => Украина
    [billing_state] => Львовская
    [billing_zip] => 23000
    [billing_city] => Львов
    [billing_address] => ул.Валова,дом 3,кв.1
    [cc_number] =>
    [cc_holdername] =>
    [cc_expires] =>
    [cc_cvv] =>
    )

    [content] => Array
    (
    [0] => Array
    (
    [0] => [735] Lexus GS300
    [1] => 49000
    [2] => 1
    [3] => 0
    [4] => 0
    [5] => 48
    [name] => Lexus GS300
    [Price] => UAH 49000.00
    [Quantity] => 1
    [tax] => 0
    [load_counter] => 0
    [itemID] => 48
    [PriceToShow] => UAH 49000.00
    [product_code] => 735
    )

    )

    )

    )
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Массив формируется из БД?
     
  3. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    если эти массивы- результат из БД(не похоже на это),то для получения результатов из БД используйте mysql_fetch_assoc()
    Если же ситуация отличается, то в общем случае можно сделать например так:
    PHP:
    $arr=array(
    0=>1,
    'Ы'=>2
    );
    foreach(
    $arr as $key=>$value){
    if(
    is_int($key))
        unset(
    $arr[$key]);
    }

     
  4. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Результат из БД.А может из временного массива.
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    то есть вы сами не знаете откуда у вас ьерется массив?
    вот, он просто откуда-то взялся)
    код, который я написал, вам подходит?
     
  6. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Да,код помог,спасибо.Там опечатка - лишний восклицательный знак.Только вот не пойму почему он не срабатывает для массива указанного ниже.

    Array
    (
    [0] => Array
    (
    [0] => [731] Lamborghini Diablo2
    [1] => 190000
    [2] => 1
    [3] => 0
    [4] => 0
    [5] => 60
    [name] => Lamborghini Diablo2
    [Price] => UAH 190000.00
    [Quantity] => 1
    [tax] => 0
    [load_counter] => 0
    [itemID] => 60
    [PriceToShow] => UAH 190000.00
    [product_code] => 731
    )

    )

    В результате массив обнуляется.
    Array
    (
    )

    Добавлено через 1 минуту
    Присмотрелся - понял.Там массив массивов.Как тогда очистиь индекы подмассива?
     
  7. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    PHP:
    $arr=array( 
    0=>1
    'Ы'=>2,
    'W'=>array(
        
    1=>2,
        
    'SS'=>3)
    );
    var_dump($arr);
    clean_num($arr);
    var_dump($arr);
    function 
    clean_num(&$arr)
        {
        foreach(
    $arr as $key=>$value)
            { 
            if(
    is_int($key))
                unset(
    $arr[$key]);
            elseif(
    is_array($value))
                
    clean_num($arr[$key]);
            } 
        }
     
  8. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Да єтот скрипт работает циклически но он же и чистит первый (цифровой) узел массива вместе со всем его содержимым.

    Добавлено через 7 минут
    Подскажите как обратится к подмассиву в первом примере
     
  9. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    тогда так.это если у вас нумерованный(ни одного строкового ключа) масив, подмасивы которого надо чистить
    PHP:
    $arr=array(0=>array('Ы'=>1,0=>1),1=>array('Ы'=>1,0=>1));
    for(
    $i=0,$s=count($arr);$i<$s;$i++){
    foreach(
    $arr[$i] as $key=>$value){ 
    if(
    is_int($key)) 
        unset(
    $arr[$i][$key]); 

    }
    PS а предыдущий работает не циклически, а рекурсивно
     
  10. Artu

    Artu Постоялец

    Регистр.:
    3 мар 2009
    Сообщения:
    75
    Симпатии:
    3
    Спасибо.Мне не зватает синтаксического опыта.
     
Статус темы:
Закрыта.