web-dev-qa-db-fra.com

PHP array () à javascript array ()

J'essaie de convertir un tableau PHP en un tableau javascript pour que datetimepicker de jQuery désactive certaines dates. Mais je n'arrive pas à trouver la bonne réponse sur Internet. J'utilise Zend Framework pour mon projet.

<?php 
            $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate');
            $disabledDaysRange = array();
            foreach($this->reservedDates as $dates) {
                 $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date);
                 $disabledDaysRange[] = $date;
            }
?>
<script>
var disabledDaysRange = $disabledDaysRange ???? Please Help;
$(function() {
    function disableRangeOfDays(d) {
        for(var i = 0; i < disabledDaysRange.length; i++) {
            if($.isArray(disabledDaysRange[i])) {
                for(var j = 0; j < disabledDaysRange[i].length; j++) {
                    var r = disabledDaysRange[i][j].split(" to ");
                    r[0] = r[0].split("-");
                    r[1] = r[1].split("-");
                    if(new Date(r[0][2], (r[0][0]-1), r[0][1]) <= d && d <= new Date(r[1][2], (r[1][0]-1), r[1][1])) {
                        return [false];
                    }
                }
            }else{
                if(((d.getMonth()+1) + '-' + d.getDate() + '-' + d.getFullYear()) == disabledDaysRange[i]) {
                    return [false];
                }
            }
        }
        return [true];
    }
    $('#date').datepicker({
        dateFormat: 'dd/mm/yy',
        beforeShowDay: disableRangeOfDays
        });
});
</script>
13
Daan

Pour convertir votre tableau PHP en JS, procédez comme suit:

var js_array = [<?php echo '"'.implode('","',  $disabledDaysRange ).'"' ?>];

ou en utilisant JSON_ENCODE:

var js_array =<?php echo json_encode($disabledDaysRange );?>;

Exemple sans JSON_ENCODE:

<script type='text/javascript'>
    <?php
    $php_array = array('abc','def','ghi');
    ?>
    var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
    alert(js_array[0]);
</script>

Exemple avec JSON_ENCODE:

<script type='text/javascript'>
    <?php
    $php_array = array('abc','def','ghi');
    ?>
    var js_array =<?php echo json_encode($disabledDaysRange );?>;
    alert(js_array[0]);
</script>
28
Charaf JRA

La fonction PHP json_encode convertit les données qui lui sont transmises en une chaîne JSON qui peut ensuite être exportée en une variable JavaScript. La fonction PHP json_encode renvoie une chaîne contenant l'équivalent JSON de la valeur qui lui est transmise.

<?php
$ar = array('Apple', 'orange', 'banana', 'strawberry');
echo json_encode($ar); // ["Apple","orange","banana","strawberry"]
?>

Vous pouvez transmettre la chaîne JSON générée par json_encode à une variable JavaScript comme suit:

<script type="text/javascript">
// pass PHP variable declared above to JavaScript variable
var ar = <?php echo json_encode($ar) ?>;
</script>

Un tableau PHP indexé numériquement est traduit en un littéral de tableau dans la chaîne JSON. Une option JSON_FORCE_OBJECT peut être utilisée si vous souhaitez que le tableau soit généré en tant qu'objet:

<?php
echo json_encode($ar, JSON_FORCE_OBJECT);
// {"0":"Apple","1":"orange","2":"banana","3":"strawberry"} 
?>

Exemple de tableau associatif:

<?php
$book = array(
    "title" => "JavaScript: The Definitive Guide",
    "author" => "David Flanagan",
    "edition" => 6
);
?>
<script type="text/javascript">
var book = <?php echo json_encode($book, JSON_PRETTY_PRINT) ?>;
/* var book = {
    "title": "JavaScript: The Definitive Guide",
    "author": "David Flanagan",
    "edition": 6
}; */
alert(book.title);
</script>

Notez que le tableau associatif de PHP devient un objet littéral en JavaScript. Nous utilisons l'option JSON_PRETTY_PRINT comme second argument de json_encode pour afficher la sortie dans un format lisible.

Vous pouvez accéder aux propriétés des objets à l'aide de la syntaxe à points, comme indiqué dans l'alerte incluse ci-dessus, ou de la syntaxe entre crochets: book ['title'].

ici vous pouvez trouver plus d'informations et de détails.

Lorsque nous convertissons le tableau PHP en tableau JS, nous obtenons toutes les valeurs dans la chaîne . Par exemple:

var ars= '<?php echo json_encode($abc); ?>';

Le problème dans la méthode ci-dessus est lorsque nous essayons d’obtenir le premier élément de ars[0], puis il nous donne crochet entre où, comme nous avons besoin du premier élément, comparé à crochet, la meilleure façon de procéder est

var packing_slip_orders = JSON.parse('<?php echo json_encode($packing_slip_orders); ?>');

Vous devez utiliser json_parse après json_encode pour obtenir le résultat exact du tableau.

4
Piyush Sharma

Cela peut être une solution facile.

var mydate = '<?php implode("##",$youdateArray); ?>';
var ret = mydate.split("##");
2
Ravi Kant Mishra

Avez-vous essayé d'utiliser json_encode http://php.net/manual/en/function.json-encode.php

Il convertit un tableau en une chaîne json

2
TemiGiwa
<?php 
  $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate');
  $disabledDaysRange = array();
  foreach($this->reservedDates as $dates) {
    $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date);
    $disabledDaysRange[] = $date;
  }
  $disDays = size($disabledDaysRange);
?>
<script>
var disabledDaysRange = {};
var disDays = '<?=$disDays;?>';
for(i=0;i<disDays;i++) {
  array.Push(disabledDaysRange,'<?=$disabledDaysRange[' + i + '];?>');
}
............................
0
DevlshOne
 <script> var disabledDaysRange = $disabledDaysRange ???? Please Help;
 $(function() {
     function disableRangeOfDays(d) {

dans le tableau ci-dessus, affectez un tableau à la variable javascript "disableDaysRange"  

$disallowDates = "";
echo "[";
foreach($disabledDaysRange as $disableDates){
 $disallowDates .= "'".$disableDates."',";
}

echo substr(disallowDates,0,(strlen(disallowDates)-1)); // this will escape the last comma from $disallowDates
echo "];";

so your javascript var diableDateRange shoudl be 

var diableDateRange = ["2013-01-01","2013-01-02","2013-01-03"];
0
Waqas Ahmed
<?php 
            $ConvertDateBack = Zend_Controller_Action_HelperBroker::getStaticHelper('ConvertDate');
            $disabledDaysRange = array();
            foreach($this->reservedDates as $dates) {
                 $date = $ConvertDateBack->ConvertDateBack($dates->reservation_date);
                 $disabledDaysRange[] = $date;
                 array_Push($disabledDaysRange, $date);
            }

            $finalArr = json_encode($disabledDaysRange);
?>
<script>
var disabledDaysRange = <?=$finalArr?>;

</script>
0
raduns