php
  • arrays
  • 2016-07-23 2 views 0 likes 
    0

    Допустим, я загрузил эту строку в базу данныхКак объявить массив, используя строку

    "Red", "Blue", "Orange", "Green" 
    

    Теперь я поставил его в переменную, которую я называю strColorArray:

    $strColorArray = '"Red", "Blue", "Orange", "Green"'; 
    

    Я не могу заставить его работать так, как я хочу, когда я помещаю его в массив, Мне интересно, есть ли простой способ понять это.

    $strColorArray = '"Red", "Blue", "Orange", "Green"'; 
    $colorArray = array($strColorArray); 
    echo $colorArray[0]; 
    

    В настоящее время

    echo $colorArray[0]; gives "Red", "Blue", "Orange", "Green" 
    

    Я хотел бы, чтобы $colorArray[0], как красный, $colorArray[1] как синий и так далее.

    ответ

    3

    Чтобы преобразовать строку в массив, вам необходимо использовать функцию explode(). В вашем случае, вы, возможно, потребуется сделать что-то большее:

    $strColorArray = '"Red", "Blue", "Orange", "Green"'; 
    $strColorArray = str_replace(array('"', ', '), array("", ","), $strColorArray); // Remove the spaces and double quotes 
    $colorArray = explode(",", $strColorArray); 
    

    Когда я даю var_dump($colorArray)(чтобы проверить содержимое переменной), я получаю этот выход:

    array(4) { 
        [0]=> 
        string(3) "Red" 
        [1]=> 
        string(4) "Blue" 
        [2]=> 
        string(6) "Orange" 
        [3]=> 
        string(5) "Green" 
    } 
    

    Выход: http://ideone.com/3MhGle

    0

    "Одна линия" решение с использованием функции preg_match_all:

    preg_match_all("/\w+/i", $strColorArray, $matches); 
    
    print_r($matches[0]); 
    

    Выход:

    Array 
    (
        [0] => Red 
        [1] => Blue 
        [2] => Orange 
        [3] => Green 
    ) 
    

    http://php.net/manual/en/function.preg-match-all.php

    +0

    Почему нет 'G' флаг? –

    +0

    @PraveenKumar, вы запутались, это не JavaScript regex – RomanPerekhrest

    +0

    О, так JavaScript только имеет 'g', не так ли? ': P' –

    0
    $strColorArray = '"Red", "Blue", "Orange", "Green"'; 
    $stripper = str_replace(array("'",'"'),'',$strColorArray); 
    $colorArray = explode(',',$stripper); 
    echo $colorArray[0]; 
    
    +0

    Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

    +0

    @FrankerZ Спасибо за ваше предложение. – Raj

    -1

    До тех пор, пока вы находитесь в контроле происходит в данных и выхода из базы данных, то это простой способ, учитывая, что формат:

    eval("\$colorArray = [$strColorArray];"); 
    

    Или для более старых версий PHP:

    eval("\$colorArray = array($strColorArray);"); 
    
    +0

    Он работает для образца, но все же довольно плохое предложение. Даже если вы «контролируете» данные, это не означает, что реальные данные не будут содержать '$' или один из многих других символов, который нарушает это. – Evert

    +0

    Кто-то мудак. – AbraCadaver

    +0

    Это был не я, но отрицательный ответ - это в значительной степени цель этой кнопки, нет? – Evert

    0

    Вот другой подход, который не использует регулярные выражения:

    $out = array_map(
        function($item) { 
         return trim($item, '" '); 
        }, 
        explode(',', $in) 
    ); 
    
    Смежные вопросы