php foreach অ্যারে মধ্যে প্রথম মান দেখাচ্ছে না

আমার একটি অ্যারে আছে ($ vEvents) নিম্নরূপ:

Array
(
[0] => Array
    (
        [id] => 1174
        [date] => 120411
        [name] => DR. J 'Souled Out' ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )

[1] => Array
    (
        [id] => 1108
        [date] => 120410
        [name] => Verb presents Open Stage ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )

[2] => Array
    (
        [id] => 1104
        [date] => 120409
        [name] => DR. J 'Souled Out' ~ 9pm (No Cover)
        [pubId] => 44
        [price] => 
    )
[currLimit] => 10
[eventsRemaining] => 4

আমি পর্দার সাথে এটি প্রতিধ্বনি করছি:

reset ($vEvents);
foreach ($vEvents as $key => &$value) {
    if ($key != 'currLimit' && $key != 'eventsRemaining'){ //Makes sure it doesn't print out the limiter value
    $m = substr($value['date'],0,2);
    $d = substr($value['date'],2,2);
    $y = '20'.substr($value['date'],4,2);
    echo date("D", mktime(0, 0, 0, $m, $d, $y)).", ".date("M", mktime(0, 0, 0, $m, $d, $y))." ".$d.", ".$y." - ".$value['name'].'
'; } }

কিন্তু আমার আউটপুট এ, সব প্রদর্শিত অ্যারে এন্ট্রি পাওয়ার পরিবর্তে, এটি প্রথম এক লাফানো রাখে ... আউটপুট:

Sat, Dec 04, 2010 - Verb presents Open Stage ~ 9pm (No Cover)
Fri, Dec 04, 2009 - DR. J 'Souled Out' ~ 9pm (No Cover)

যাইহোক, আমার প্রত্যাশিত আউটপুট হতে হবে:

Sun, Dec 04, 2011 - DR. J 'Souled Out' ~ 9pm (No Cover)
Sat, Dec 04, 2010 - Verb presents Open Stage ~ 9pm (No Cover)
Fri, Dec 04, 2009 - DR. J 'Souled Out' ~ 9pm (No Cover)

আমি নাম </কোড> কী এবং এইগুলির মধ্যে মানগুলি পরিবর্তন করার চেষ্টা করেছি, কিন্তু সমস্ত সমগ্র চিত্রটি জরিমানা, এটি কেবল প্রথম কীটি ছেড়ে যায় আমি আগে এই সমস্যা ছিল না। থটস?

When I comment out the:if ($key != 'currLimit' && $key != 'eventsRemaining'){ //Makes sure it doesn't print out the limiter value line, it works fine. Is it relevant that the key of the first element is zero? But why would that fail my if check?

1
যোগ সম্পাদিত
মতামত: 1
এটা স্পষ্টভাবে সমস্যা না বলার অপেক্ষা রাখে না, কিন্তু আপনি এম্পারসেন্ড সঙ্গে আপনার লুপ পরিবর্তনশীল prefixing করছি কেন ভাগ করে নিতে হবে?
যোগ লেখক Brian Warshaw, উৎস
আপনার সংখ্যাসূচক চাবি আসলে সংখ্যাসূচক বা তারা স্ট্রিং হয়?
যোগ লেখক Brian Warshaw, উৎস
আপনার কোড ঠিক দেখাচ্ছে। আপনার print_r() এবং আপনার লুপের মধ্যে কি ঘটছে? উপায় দ্বারা, আপনি রিসেট -ক্লালকে বাদ দিতে পারেন যেমনটি কোন প্রভাব না থাকা উচিত।
যোগ লেখক yankee, উৎস
@ ইয়্যাঙ্কি আমি সমস্যাটি চেষ্টা এবং ডিবাব করার জন্য রিসেট যোগ করেছি। সাধারণত আমি এটি যোগ করা হবে না।
যোগ লেখক MaurerPower, উৎস
@ ক্রিস সেখানে একটি লাইন আছে যা আমি ব্যবহার করছিলাম, কিন্তু আমি দেখতে পাইনা কিভাবে এটি প্রভাবিত করবে ... দয়া করে আপডেট প্রশ্নটি দেখুন
যোগ লেখক MaurerPower, উৎস
আপনি পোস্ট কোড এবং অ্যারের বিষয়বস্তু সঠিকভাবে প্রতিনিধিত্ব করছেন কোড এবং অ্যারের বিষয়বস্তু আসলে আপনি সম্পাদন করছি। আপনি একটি ব্র্যান্ড নতুন সম্পূর্ণ আলাদা স্ক্রিপ্ট পোস্ট কোড এবং অ্যারের চালানো, এবং আপনি এটা কাজ করে দেখতে পাবেন।
যোগ লেখক goat, উৎস
লুপের জন্য মূল্যের ডিবাগ করার চেষ্টা করুন
যোগ লেখক Moyed Ansari, উৎস

2 উত্তর

কারণ এটি একটি অ্যারে, আমি একটি ভিন্ন ধরনের লুপ ব্যবহার করার চেষ্টা করব যা আপনাকে প্রত্যাশিত ফলাফল দিতে হবে:

<?php

$length = count( $vEvents );

for( $i = 0; $i < $length; i ++ )
{

$key = $i;
$value = $vEvents[ $i ];

//rest of the loop code here

}
?>
3
যোগ
@ সেলভে বিন্ডার: যেহেতু আপনি সহচরী অ্যারে জন্য foreach ব্যবহার করতে পারেন যেহেতু এইটি ভালো: foreach ($ key হিসাবে $ অ্যারে => $ মান)
যোগ লেখক xbonez, উৎস
foreach অ্যারে জন্য বিশেষভাবে একটি বিমূর্ততা, কিন্তু অ্যারে জন্য উপযুক্ত। এটা foreach ব্যবহারের জন্য পুরোপুরি জরিমানা হিসাবে আমি এটি কোড পড়তে একটি অতিরিক্ত হিসাবে বোঝা।
যোগ লেখক yankee, উৎস
আমার বোঝার foreach লুপ বিশেষভাবে প্রথম উপাদান থেকে শুরু, এবং শেষে শেষ একটি অ্যারের মাধ্যমে iterating জন্য ব্যবহৃত হয়
যোগ লেখক MaurerPower, উৎস
এই সমস্যাটি সমাধান করার পরে সমস্যাটি দুইটি কী আছে যেটি পরে লুপে অ্যাক্সেস করতে হবে। তারা যৌথ হয়। সুতরাং কেন আমি একটি foreach ব্যবহার করার চেষ্টা করছি।
যোগ লেখক MaurerPower, উৎস
foreach ভাল যখন আপনি একটি বস্তুর কী/সূচী না জানেন, যখন loops সূচিবদ্ধ অ্যারে জন্য ভাল।
যোগ লেখক Steve Binder, উৎস
এখানে প্রশ্ন এখানে কেন foreach "0" সূচী সরিয়ে ফেলা হয়, তাই কেন আমি একটি লুপ জন্য সুপারিশ।
যোগ লেখক Steve Binder, উৎস

পিএইচপি অদ্ভুত যখন এটি 0 মান সঙ্গে ডিল করা হয় ... এটি অধিকাংশ ক্ষেত্রে মিথ্যা হিসেবে তাদের আচরণ। সুতরাং,

if ($key != 'currLimit' && $key != 'eventsRemaining')

$ key = $ 0. এ মিথ্যা নির্ধারণ করা যাচ্ছে। আমি এতে এটি পরিবর্তন করব:

if ($key !== 'currLimit' && $key !== 'eventsRemaining')
2
যোগ
পারফেক্ট !!! যদিও আমি জানি 0 পিএইচপি-তে ভুল বোঝাচ্ছে, আমার ধারণা ছিল না যে এই ধরনের সিনট্যাক্সের সাথে কার্যকর হবে। কঠোর তুলনা ব্যবহার মহান কাজ, ধন্যবাদ !!!
যোগ লেখক MaurerPower, উৎস
আবার ধন্যবাদ! এইজন্য আমি তাই ভালবাসি ব্যবহারকারীরা আপনার মতো যারা উত্তম উত্তরগুলি প্রদান করে না, তবে কেন একটি স্পষ্ট ব্যাখ্যাও কেন? আমরা সব শিখতে কিভাবে যে :)
যোগ লেখক MaurerPower, উৎস
কিছুটা খনন করা হয়েছে এবং এটি খুঁজে পাওয়া গেছে যে $ কীটি একটি পূর্ণসংখ্যা মান, পিএইচপি একটি পূর্ণসংখ্যার 'currLimit' রূপান্তরিত করে ... যা 0 কে মূল্যায়ন করে। সুতরাং 0! = 0 মিথ্যা।
যোগ লেখক bobwienholt, উৎস