За последние 24 часа нас посетили 37336 программистов и 6864 робота. Сейчас ищут 1676 программистов ...

Массив перемешанный

Тема в разделе "PHP для новичков", создана пользователем marikkil, 16 мар 2013.

  1. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    Итак, расскажу вкратце. Значит, имеется массив $a , из него вытаскиваем ключи в массив $c,потом из $a вытаскиваем значения и ложим их в $d,потом перемешиваем массив $a. После всех этих дейсвтий исопльзуя массивы $c and $d деелаем тот же массив $a , но прежний массив $a остается, то есть после перемешивания будет по другому.
    Вот кодтеперь мне нужно сделать тот же массив $a? но уже после перемешивания он будет другим.)
    <?php
    $a=array("book1"=>'Ayupov',"book2"=>'Borisov',"book3"=>'Drozdov');
    $c=array();
    foreach ($a as $key=>$x)
    {
    $c[]=$key;
    }
    $d=array();
    foreach ($a as $klo=>$v)
    {
    $d[]=$v;
    }
    reset($a);
    print_r ($a);
    print_r ($c);
    print_r ($d);
    shuffle ($a);
    вот сюда создаем массив $a , но он уже перемешанный(используя $c and $d, наверное)
    print_r ($a);

    ?>
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    вы сами-то поняли что написали в задаче? и что-то я не вижу перемешивания массива в решении....
     
  3. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    shuffle($a) видите? вот как щас заново этот массив написать но он уже будет перемешанным
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    теперь вижу, да... но задача все равно осталась undefined... что вы хотите-то добиться? вы шафнули А, зачем вам теперь "используя Ц и Д наверное"?
     
  5. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    блин, вот я сам не понимаю, мне препод сказал, дело в том что он наверное имел ввиду что, как бы после перемешивания массива а, заново создать ее можно только используя Ц И Д , мол если массив перемешивается , сделать ее будет сложнее . Как же это сделать? , я вообще не понимаю
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ааааааа)))) ну вам в мануал по функциям работы с массивом. все чудо будет заключаться в объединении Ц как ключей и Д как значений в "новый" массив А который будет как первоначальный А до шафла.
     
  7. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    вы имеете ввиду что $a=array_combine($c,$d)? , я пробовал, это работает, но мне надо по другому
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    и в чем сложность? длина у массивов одинаковая же... я придумал уже два алгоритма с циклами)))
     
  9. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    я перепробывал, множество циклов используя разные команды, у меня почему-то значеиня передаются а ключи нет .

    Добавлено спустя 1 минуту 11 секунд:
    хмм можете показать как вы это сделали? я возьму это на вооружение в следующий раз.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    показывайте как пробовали. поясню что вы сделали не так и (так и быть) дам вам два алгоритма из моей головы.
     
  11. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    Сейчас напишу

    Добавлено спустя 4 минуты 28 секунд:
    <?php
    $a=array("book1"=>'Ayupov',"book2"=>'Borisov',"book3"=>'Drozdov');
    $c=array();
    foreach ($a as $key=>$x)
    {
    $c[]=$key;



    }
    $d=array();
    foreach ($a as $klo=>$v)
    {
    $d[]=$v;
    }



    print_r ($a);
    print_r ($c);
    print_r ($d);

    shuffle ($a);


    while(list($er,$b)=each($c))
    {



    $a[$b]=$v;

    }
    print_r ($a);

    Добавлено спустя 52 секунды:
    там где each($c) пробовал а , но не получилось , ибо я нуб
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    У вас есть массив $a который заполнен через " ключ=>значение ".
    Есть объявленная переменная $c как массив.
    Вы разбираете заполненный массив $a через " ключ=>значение ".
    Заполняете массив $c через числовые ключи, значением ключа массива $a.
    $c[]=$key;

    Получается
    Код (PHP):
    1. $c[0] //выведет ключ массива $a который первый-это book1  
    Смысл так делать?(
    Что требуется, зачем было 2 раз записывать и что нужно перемешать.
    Объясните, что было в задании?
    Код не совсем понятный...

    Написал так, может быть оно?))
    Код (PHP):
    1. function pre(array $array) {
    2.     echo'<pre>';
    3.         print_r($array);
    4.     echo'</pre>';
    5. }
    6. $arrayBook=array('book1'=>'Ayupov','book2'=>'Borisov','book3'=>'Drozdov');
    7. pre($arrayBook);
    8. $arraySort=array_keys($arrayBook);
    9. shuffle($arraySort);
    10. $arrayBook=array_merge(array_flip($arraySort),$arrayBook);
    11. pre($arrayBook);
     
  13. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    неет, не правильно . Дело в том что первы ассоциативный массив $a после премешивание будет не по пораядку и поэтому используя $c and $d ну или по другому заново образовав массив $a , он будет не по порядку , черт возьми, как это сделать?!
     
  14. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    $a = array();
    while( $k = array_shift( $c ) )
    {
    $a[ $k ] = array_shift( $d );
    }
     
  15. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    УаУ Ganzal вы превосходны, обьясните как вы это сделали пожалуйста по порядку

    Добавлено спустя 41 секунду:
    а есть еще способы сделать? напиштие их тоже пожалуйста
     
  16. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    до вечера потерпи (ну или кто-то тут напишет) - на работу улетаю
     
  17. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    аа понятно)
     
  18. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Код (PHP):
    1. foreach($c as $key=>$val) {
    2.     $a[$val]=$d[$key];
    3. } 
     
  19. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Your, уделал)))
     
  20. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    ААА YOUR ВЫ Оба молодцы , спасибо ребята!
     
  21. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Код (PHP):
    1. $a=array("book1"=>'Ayupov',"book2"=>'Borisov',"book3"=>'Drozdov');
    2. $c=$d=array();
    3. function pre(array $array) {
    4.     echo'<pre>';
    5.         print_r($array);
    6.     echo'</pre>';
    7. }
    8. function foreachs(array $arr1,array &$arr2,$bool=true,$add=true) {
    9.     foreach($arr1 as $key=>$val) {
    10.         if($add) {
    11.             $arr2[]=($bool)?$val:$key;
    12.         } else {
    13.             global $d;
    14.             $arr2[$d[$key]]=$val;
    15.         }
    16.     }
    17. }
    18. foreachs($a,$c);
    19. foreachs($a,$d,false);
    20. pre($a);
    21. pre($c);
    22. pre($d);
    23. shuffle($a);
    24. foreachs($c,$a,false,false);
    25. pre($a); 
    Если еще посидеть можно лучше сделать...
    Это так просто проверка)))
     
  22. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
    нее) это еще не мой уровень) вы слишком сложный код написали) с функцией)
     
  23. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    самое время принять новые концепции =)
     
  24. marikkil

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

    С нами с:
    16 мар 2013
    Сообщения:
    29
    Симпатии:
    0
  25. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Ну тогда еще задание:
    Переверните ключи и значения массива
    Код (PHP):
    1. $arrayBook=array('Ayupov','Borisov','Drozdov'); 
    Чтобы они были по убыванию, а не по возрастанию.
    Код (PHP):
    1. (
    2.     [0] => Ayupov
    3.     [1] => Borisov
    4.     [2] => Drozdov
    5. ) 
    Переварачиваем:
    Код (PHP):
    1. (
    2.     [2] => Drozdov
    3.     [1] => Borisov
    4.     [0] => Ayupov
    5. )