За последние 24 часа нас посетили 17893 программиста и 1650 роботов. Сейчас ищут 2194 программиста ...

смена ключей в массиве

Тема в разделе "PHP для новичков", создана пользователем Alukard, 28 апр 2007.

  1. Alukard

    Alukard Активный пользователь

    С нами с:
    27 июн 2006
    Сообщения:
    110
    Симпатии:
    0
    В обшем имеем массив вида [key]=>value например [0]=>1,[2]=>2,[3]=>3,[4]=>4,[6]=>5,[12]=>6,[13]=>7,[22]=>8...Какой самый НЕ ресурсоемкий способ сделать из этого массива, массив [0]=>1,[1]=>2,[2]=>3,[3]=>4,[4]=>5,[5]=>6,[6]=>7,[7]=>8
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  3. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    Всем привет.
    Подскажите пожалуйста, есть ли более просто способ изменить в массиве определенное имя ключа?
    Массив такой:
    PHP:
    1. <?
    2. $array = array($_POST["ed_poll"] => array(
    3. "songs" => $_POST["names"],
    4. "links" => $_POST["links"],
    5. "votes" => array(
    6. "emotion" => array_fill(0, sizeof($_POST["names"]), '0'),
    7. "quality" => array_fill(0, sizeof($_POST["names"]), '0'),
    8. "audience" => array_fill(0, sizeof($_POST["names"]), '0')),
    9. "people" => array_fill(0, sizeof($_POST["names"]), '0')));
    10. ?>
    11.  
    PHP:
    1. <?
    2. $keys = array_keys(array);
    3. $values = array_values(array);
    4. $search_key = array_search($_POST["ed_poll"], $keys); // $_POST["ed_poll"] - ключ, который надо заменить//
    5. $keys[$search_key] = $_POST["ed_poll_name"]; // $_POST["ed_poll_name"] - новый ключ //
    6. $create_array = array_combine($keys, $values);
    7. ?>
    8.  
    :roll:
     
  4. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Demon
    Что-то у вас тут очень много лишнего... Это ж не С, чтобы memset делать :)

    PHP:
    1. <?php
    2. $array['newkey'] = $a['oldkey'];
    3. unset($a['oldkey']);
    4. ?>
     
  5. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    AlexGousev: Такой вариант я пробовал - не пашет..:(
     
  6. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Не верю...
     
  7. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    PHP:
    1. <?
    2. echo '<form action="#" method="post">';
    3. $array = array(
    4. "First" => array("songs" => array(0 => "one"), "links" => array(0 => "one", 1 => "two", 2 => "three", 3 => "four")),
    5. "Second" => array("songs" => array(0 => "one"), "links" => array(0 => "one", 1 => "two", 2 => "three", 3 => "four")),
    6. "Third" => array("songs" => array(0 => "one"), "links" => array(0 => "one", 1 => "two", 2 => "three", 3 => "four"))
    7. );
    8. echo '<input type="text" name="ed_poll" /><input type="submit" name="edit" value="Edit">';
    9. if($_POST["ed_poll"]) {
    10. $_POST["ed_poll"] = $array["First"];
    11. unset($array["First"]);
    12. }  
    13. echo "<br />";
    14. print_r($_POST["ed_poll"]);
    15. echo "<br />";
    16. print_r($array);
    17. echo '</form>';
    18. ?>
     
  8. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    в десятой строке надо
    $array[ $_POST["ed_poll"] ] = $array["First"];
     
  9. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    eduha: Пасиб, работает.

    To all: подскажите пожалуйста, как произвести опрерацию деления для определенных ключей массива? Есть два массива:
    PHP:
    1. <?
    2. $first = array( 0 => "1", 1 => "0", 2 => "3", 3 => "1", 4 => "0", 5 => "0");
    3. $second = array( 0 => "5", 1 => "0", 2 => "7", 3 => "5", 4 => "0", 5 => "0");
    4. ?>
    Нужно разделить значение ключей первого массива, на значение ключей второго массива, обходя ключи с нулем.
    Циклы не годяться, т.к выдается ошибка. Подскажите наиболее простой вариант пожалуйста. :oops:
     
  10. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Нужно деление ключей? Или значений?

    Если значений, то
    PHP:
    1. <?php
    2. for ($i=0; isset($arr1[$i]) && isset($arr2[$i]); $i++)
    3.    $arr3[$i] = ($arr2[$i]>0)?$arr1[$i]/$arr2[$i]:0;
    4. ?>
    Если ключей, то


    PHP:
    1. <?php
    2. if (reset($arr1) !== false && reset($arr2) !== false) {
    3.    for ($i=0;;$i++) {
    4.       $arr3[$i] = (key($arr2) > 0)?key($arr1)/key($arr2):0;
    5.       if (next($arr1) === false || next($arr2) === false)
    6.          break;
    7.    }
    8. }
    9. ?>
     
  11. safrash

    safrash Активный пользователь

    С нами с:
    10 апр 2007
    Сообщения:
    24
    Симпатии:
    0
    Есть два массива, оба с целыми числами, значения каждого меняются с определенным шагом. После объединения ключ нового начинается с 0, а нужно с 1. Как добиться?
     
  12. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    занять нулевой элемент "шумовыми" данными... :roll:
     
  13. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    AlexGousev: Пасиб, то что нужно.;)
    safrash: Например так...

    PHP:
    1. <?
    2. $first = array(0 => "1", 1 => "2", 2 => "3", 3 => "4");
    3. $second = array(4 => "5", 5 => "6", 6 => "7", 7 => "8");
    4. $merge = $first + $second;
    5. $combine = array_combine(array_keys(array_fill(1, sizeof($merge), '0')), array_values($merge));
    6. print_r($combine);
    7. ?>
    8.  
     
  14. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    Alukard array_values ();

    safrash $arr = $arr1 + $arr2; array_unshift ($arr, ''); unset ($arr[0]);